mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
bpo-46765: Replace Locally Cached Strings with Statically Initialized Objects (gh-31366)
https://bugs.python.org/issue46765
This commit is contained in:
parent
cff4d5c5d2
commit
1f455361ec
22 changed files with 192 additions and 526 deletions
|
@ -3,6 +3,7 @@
|
|||
#include "pycore_gc.h" // PyGC_Head
|
||||
#include "pycore_hashtable.h" // _Py_hashtable_t
|
||||
#include "pycore_pymem.h" // _Py_tracemalloc_config
|
||||
#include "pycore_runtime.h" // _Py_ID()
|
||||
#include "pycore_traceback.h"
|
||||
#include <pycore_frame.h>
|
||||
|
||||
|
@ -15,6 +16,8 @@ module _tracemalloc
|
|||
[clinic start generated code]*/
|
||||
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=708a98302fc46e5f]*/
|
||||
|
||||
_Py_DECLARE_STR(anon_unknown, "<unknown>");
|
||||
|
||||
/* Trace memory blocks allocated by PyMem_RawMalloc() */
|
||||
#define TRACE_RAW_MALLOC
|
||||
|
||||
|
@ -91,7 +94,6 @@ typedef struct {
|
|||
static const unsigned long MAX_NFRAME = Py_MIN(UINT16_MAX, ((SIZE_MAX - sizeof(traceback_t)) / sizeof(frame_t) + 1));
|
||||
|
||||
|
||||
static PyObject *unknown_filename = NULL;
|
||||
static traceback_t tracemalloc_empty_traceback;
|
||||
|
||||
/* Trace of a memory block */
|
||||
|
@ -305,7 +307,7 @@ hashtable_compare_traceback(const void *key1, const void *key2)
|
|||
static void
|
||||
tracemalloc_get_frame(InterpreterFrame *pyframe, frame_t *frame)
|
||||
{
|
||||
frame->filename = unknown_filename;
|
||||
frame->filename = &_Py_STR(anon_unknown);
|
||||
int lineno = PyCode_Addr2Line(pyframe->f_code, pyframe->f_lasti*sizeof(_Py_CODEUNIT));
|
||||
if (lineno < 0) {
|
||||
lineno = 0;
|
||||
|
@ -905,15 +907,10 @@ tracemalloc_init(void)
|
|||
return -1;
|
||||
}
|
||||
|
||||
unknown_filename = PyUnicode_FromString("<unknown>");
|
||||
if (unknown_filename == NULL)
|
||||
return -1;
|
||||
PyUnicode_InternInPlace(&unknown_filename);
|
||||
|
||||
tracemalloc_empty_traceback.nframe = 1;
|
||||
tracemalloc_empty_traceback.total_nframe = 1;
|
||||
/* borrowed reference */
|
||||
tracemalloc_empty_traceback.frames[0].filename = unknown_filename;
|
||||
tracemalloc_empty_traceback.frames[0].filename = &_Py_STR(anon_unknown);
|
||||
tracemalloc_empty_traceback.frames[0].lineno = 0;
|
||||
tracemalloc_empty_traceback.hash = traceback_hash(&tracemalloc_empty_traceback);
|
||||
|
||||
|
@ -947,8 +944,6 @@ tracemalloc_deinit(void)
|
|||
#ifdef REENTRANT_THREADLOCAL
|
||||
PyThread_tss_delete(&tracemalloc_reentrant_key);
|
||||
#endif
|
||||
|
||||
Py_XDECREF(unknown_filename);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue