@@ -338,11 +338,12 @@ unwind_stack_for_thread(
338338 PyObject * result = NULL ;
339339 StackChunkList chunks = {0 };
340340
341- char ts [SIZEOF_THREAD_STATE ];
341+ char local_ts [SIZEOF_THREAD_STATE ];
342342 char local_prefetched_frame [SIZEOF_INTERP_FRAME ];
343+ const char * ts ;
343344 RemoteReadPrefetch ctx_prefetch = {0 };
344345 if (prefetch -> tstate && prefetch -> tstate_addr == * current_tstate ) {
345- memcpy ( ts , prefetch -> tstate , ( size_t ) unwinder -> debug_offsets . thread_state . size ) ;
346+ ts = prefetch -> tstate ;
346347 if (prefetch -> frame ) {
347348 ctx_prefetch .frame = prefetch -> frame ;
348349 ctx_prefetch .frame_addr = prefetch -> frame_addr ;
@@ -356,33 +357,35 @@ unwind_stack_for_thread(
356357 predicted_frame_addr = entry -> addrs [0 ];
357358 }
358359
359- int bytes_read = read_thread_state_and_maybe_frame (
360+ int rc = read_thread_state_and_maybe_frame (
360361 unwinder ,
361362 * current_tstate ,
362363 (size_t )unwinder -> debug_offsets .thread_state .size ,
363- ts ,
364+ local_ts ,
364365 predicted_frame_addr ,
365366 local_prefetched_frame ,
366367 & have_prefetched_frame );
367- if (bytes_read < 0 ) {
368+ if (rc < 0 ) {
368369 set_exception_cause (unwinder , PyExc_RuntimeError , "Failed to read thread state" );
369370 goto error ;
370371 }
372+ ts = local_ts ;
371373 if (have_prefetched_frame ) {
372374 ctx_prefetch .frame = local_prefetched_frame ;
373375 ctx_prefetch .frame_addr = predicted_frame_addr ;
374376 }
375377 }
376378 else {
377- int bytes_read = _Py_RemoteDebug_ReadRemoteMemory (
379+ int rc = _Py_RemoteDebug_ReadRemoteMemory (
378380 & unwinder -> handle ,
379381 * current_tstate ,
380382 (size_t )unwinder -> debug_offsets .thread_state .size ,
381- ts );
382- if (bytes_read < 0 ) {
383+ local_ts );
384+ if (rc < 0 ) {
383385 set_exception_cause (unwinder , PyExc_RuntimeError , "Failed to read thread state" );
384386 goto error ;
385387 }
388+ ts = local_ts ;
386389 }
387390 STATS_INC (unwinder , memory_reads );
388391 STATS_ADD (unwinder , memory_bytes_read , unwinder -> debug_offsets .thread_state .size );
0 commit comments