@@ -46,7 +46,7 @@ typedef struct tracemalloc_frame frame_t;
4646typedef struct tracemalloc_traceback traceback_t ;
4747
4848#define TRACEBACK_SIZE (NFRAME ) \
49- (sizeof(traceback_t) + sizeof(frame_t) * (NFRAME - 1 ))
49+ (sizeof(traceback_t) + sizeof(frame_t) * (NFRAME))
5050
5151static const int MAX_NFRAME = UINT16_MAX ;
5252
@@ -329,8 +329,9 @@ traceback_new(void)
329329 traceback -> nframe = 0 ;
330330 traceback -> total_nframe = 0 ;
331331 traceback_get_frames (traceback );
332- if (traceback -> nframe == 0 )
333- return & tracemalloc_empty_traceback ;
332+ if (traceback -> nframe == 0 ) {
333+ return tracemalloc_empty_traceback ;
334+ }
334335 traceback -> hash = traceback_hash (traceback );
335336
336337 /* intern the traceback */
@@ -754,12 +755,18 @@ _PyTraceMalloc_Init(void)
754755 return _PyStatus_NO_MEMORY ();
755756 }
756757
757- tracemalloc_empty_traceback .nframe = 1 ;
758- tracemalloc_empty_traceback .total_nframe = 1 ;
758+ assert (tracemalloc_empty_traceback == NULL );
759+ tracemalloc_empty_traceback = raw_malloc (TRACEBACK_SIZE (1 ));
760+ if (tracemalloc_empty_traceback == NULL ) {
761+ return _PyStatus_NO_MEMORY ();
762+ }
763+
764+ tracemalloc_empty_traceback -> nframe = 1 ;
765+ tracemalloc_empty_traceback -> total_nframe = 1 ;
759766 /* borrowed reference */
760- tracemalloc_empty_traceback . frames [0 ].filename = & _Py_STR (anon_unknown );
761- tracemalloc_empty_traceback . frames [0 ].lineno = 0 ;
762- tracemalloc_empty_traceback . hash = traceback_hash (& tracemalloc_empty_traceback );
767+ tracemalloc_empty_traceback -> frames [0 ].filename = & _Py_STR (anon_unknown );
768+ tracemalloc_empty_traceback -> frames [0 ].lineno = 0 ;
769+ tracemalloc_empty_traceback -> hash = traceback_hash (tracemalloc_empty_traceback );
763770
764771 tracemalloc_config .initialized = TRACEMALLOC_INITIALIZED ;
765772 return _PyStatus_OK ();
@@ -782,6 +789,9 @@ tracemalloc_deinit(void)
782789 _Py_hashtable_destroy (tracemalloc_filenames );
783790
784791 PyThread_tss_delete (& tracemalloc_reentrant_key );
792+
793+ raw_free (tracemalloc_empty_traceback );
794+ tracemalloc_empty_traceback = NULL ;
785795}
786796
787797
0 commit comments