From f9a71153e9122a3d2bb86fc479bdda2f2adc859e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Mar 2016 23:54:42 +0100 Subject: [PATCH] Issue #26588: remove debug traces from _tracemalloc. --- Include/pymem.h | 2 - Lib/test/test_tracemalloc.py | 10 ----- Lib/test/test_warnings/__init__.py | 1 - Modules/_testcapimodule.c | 14 ------ Modules/_tracemalloc.c | 69 +++--------------------------- 5 files changed, 5 insertions(+), 91 deletions(-) diff --git a/Include/pymem.h b/Include/pymem.h index 3fac5231e19..941e00f6c2c 100644 --- a/Include/pymem.h +++ b/Include/pymem.h @@ -59,8 +59,6 @@ PyAPI_FUNC(int) _PyTraceMalloc_Untrack( PyAPI_FUNC(PyObject*) _PyTraceMalloc_GetTraceback( _PyTraceMalloc_domain_t domain, Py_uintptr_t ptr); - -PyAPI_DATA(int) tracemalloc_debug; #endif /* !Py_LIMITED_API */ diff --git a/Lib/test/test_tracemalloc.py b/Lib/test/test_tracemalloc.py index 44cd539066b..359d9c085f6 100644 --- a/Lib/test/test_tracemalloc.py +++ b/Lib/test/test_tracemalloc.py @@ -88,9 +88,6 @@ def traceback_filename(filename): class TestTracemallocEnabled(unittest.TestCase): def setUp(self): - if _testcapi: - _testcapi.tracemalloc_set_debug(True) - if tracemalloc.is_tracing(): self.skipTest("tracemalloc must be stopped before the test") @@ -98,8 +95,6 @@ class TestTracemallocEnabled(unittest.TestCase): def tearDown(self): tracemalloc.stop() - if _testcapi: - _testcapi.tracemalloc_set_debug(False) def test_get_tracemalloc_memory(self): data = [allocate_bytes(123) for count in range(1000)] @@ -882,9 +877,6 @@ class TestCAPI(unittest.TestCase): maxDiff = 80 * 20 def setUp(self): - if _testcapi: - _testcapi.tracemalloc_set_debug(True) - if tracemalloc.is_tracing(): self.skipTest("tracemalloc must be stopped before the test") @@ -898,8 +890,6 @@ class TestCAPI(unittest.TestCase): def tearDown(self): tracemalloc.stop() - if _testcapi: - _testcapi.tracemalloc_set_debug(False) def get_traceback(self): frames = _testcapi.tracemalloc_get_traceback(self.domain, self.ptr) diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py index f2401c8c966..e6f47cda4c3 100644 --- a/Lib/test/test_warnings/__init__.py +++ b/Lib/test/test_warnings/__init__.py @@ -772,7 +772,6 @@ class CWarningsDisplayTests(WarningsDisplayTests, unittest.TestCase): class PyWarningsDisplayTests(WarningsDisplayTests, unittest.TestCase): module = py_warnings - @unittest.skipIf(True, "FIXME: Issue #26588") def test_tracemalloc(self): self.addCleanup(support.unlink, support.TESTFN) diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index f952aec36f4..8c794859ebe 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3747,19 +3747,6 @@ tracemalloc_get_traceback(PyObject *self, PyObject *args) return _PyTraceMalloc_GetTraceback(domain, (Py_uintptr_t)ptr); } -PyObject* -tracemalloc_set_debug(PyObject *self, PyObject *args) -{ - int debug; - extern int tracemalloc_debug; - - if (!PyArg_ParseTuple(args, "i", &debug)) - return NULL; - - tracemalloc_debug = debug; - Py_RETURN_NONE; -} - static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -3949,7 +3936,6 @@ static PyMethodDef TestMethods[] = { {"tracemalloc_track", tracemalloc_track, METH_VARARGS}, {"tracemalloc_untrack", tracemalloc_untrack, METH_VARARGS}, {"tracemalloc_get_traceback", tracemalloc_get_traceback, METH_VARARGS}, - {"tracemalloc_set_debug", tracemalloc_set_debug, METH_VARARGS}, {NULL, NULL} /* sentinel */ }; diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index a674d0c6040..77742dec11a 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -45,8 +45,6 @@ static struct { int use_domain; } tracemalloc_config = {TRACEMALLOC_NOT_INITIALIZED, 0, 1, 1}; -int tracemalloc_debug = 0; - #if defined(TRACE_RAW_MALLOC) && defined(WITH_THREAD) /* This lock is needed because tracemalloc_free() is called without the GIL held from PyMem_RawFree(). It cannot acquire the lock because it @@ -898,35 +896,23 @@ tracemalloc_clear_traces(void) _Py_hashtable_clear(tracemalloc_filenames); } -#define DEBUG(MSG) \ - if (tracemalloc_debug) { fprintf(stderr, "[pid %li, tid %li, reentrant key %i] " MSG "\n", (long)getpid(), PyThread_get_thread_ident(), tracemalloc_reentrant_key); fflush(stderr); } - static int tracemalloc_init(void) { -DEBUG("tracemalloc_init()"); - -#ifdef WITH_THREAD - assert(PyGILState_Check()); -#endif - if (tracemalloc_config.initialized == TRACEMALLOC_FINALIZED) { PyErr_SetString(PyExc_RuntimeError, "the tracemalloc module has been unloaded"); return -1; } - if (tracemalloc_config.initialized == TRACEMALLOC_INITIALIZED) { -DEBUG("tracemalloc_init(): exit (already initialized)"); + if (tracemalloc_config.initialized == TRACEMALLOC_INITIALIZED) return 0; - } PyMem_GetAllocator(PYMEM_DOMAIN_RAW, &allocators.raw); #ifdef REENTRANT_THREADLOCAL tracemalloc_reentrant_key = PyThread_create_key(); -fprintf(stderr, "[pid %li, tid %li] PyThread_create_key() -> %i\n", (long)getpid(), PyThread_get_thread_ident(), tracemalloc_reentrant_key); fflush(stderr); if (tracemalloc_reentrant_key == -1) { #ifdef MS_WINDOWS PyErr_SetFromWindowsErr(0); @@ -988,12 +974,9 @@ fprintf(stderr, "[pid %li, tid %li] PyThread_create_key() -> %i\n", (long)getpid /* Disable tracing allocations until hooks are installed. Set also the reentrant flag to detect bugs: fail with an assertion error if set_reentrant(1) is called while tracing is disabled. */ -DEBUG("tracemalloc_init(): set_reentrant(1)"); set_reentrant(1); tracemalloc_config.initialized = TRACEMALLOC_INITIALIZED; -DEBUG("tracemalloc_init(): done"); -assert(get_reentrant()); return 0; } @@ -1001,11 +984,8 @@ assert(get_reentrant()); static void tracemalloc_deinit(void) { -DEBUG("tracemalloc_deinit()"); - if (tracemalloc_config.initialized != TRACEMALLOC_INITIALIZED) { -DEBUG("tracemalloc_deinit(): exit (not initialized)"); + if (tracemalloc_config.initialized != TRACEMALLOC_INITIALIZED) return; - } tracemalloc_config.initialized = TRACEMALLOC_FINALIZED; tracemalloc_stop(); @@ -1022,15 +1002,12 @@ DEBUG("tracemalloc_deinit(): exit (not initialized)"); } #endif -DEBUG("tracemalloc_deinit(): delete reentrant key"); #ifdef REENTRANT_THREADLOCAL -fprintf(stderr, "[pid %li, tid %li] PyThread_delete_key(%i)\n", (long)getpid(), PyThread_get_thread_ident(), tracemalloc_reentrant_key); fflush(stderr); PyThread_delete_key(tracemalloc_reentrant_key); tracemalloc_reentrant_key = -1; #endif Py_XDECREF(unknown_filename); -DEBUG("tracemalloc_deinit(): done"); } @@ -1040,24 +1017,13 @@ tracemalloc_start(int max_nframe) PyMemAllocatorEx alloc; size_t size; -DEBUG("tracemalloc_start()"); - -#ifdef WITH_THREAD - assert(PyGILState_Check()); -#endif - - if (tracemalloc_init() < 0) { -DEBUG("tracemalloc_start(): ERROR! init failed!"); + if (tracemalloc_init() < 0) return -1; - } if (tracemalloc_config.tracing) { /* hook already installed: do nothing */ -DEBUG("tracemalloc_start(): exit (already tracing)"); -assert(!get_reentrant()); return 0; } -assert(get_reentrant()); assert(1 <= max_nframe && max_nframe <= MAX_NFRAME); tracemalloc_config.max_nframe = max_nframe; @@ -1097,12 +1063,8 @@ assert(get_reentrant()); /* everything is ready: start tracing Python memory allocations */ tracemalloc_config.tracing = 1; - -DEBUG("tracemalloc_start(): set_reentrant(0)"); set_reentrant(0); -DEBUG("tracemalloc_start(): done"); -assert(!get_reentrant()); return 0; } @@ -1110,25 +1072,14 @@ assert(!get_reentrant()); static void tracemalloc_stop(void) { -DEBUG("tracemalloc_stop()"); - -#ifdef WITH_THREAD - assert(PyGILState_Check()); -#endif - - if (!tracemalloc_config.tracing) { -DEBUG("tracemalloc_stop(): exit (not tracing)"); -assert(get_reentrant()); + if (!tracemalloc_config.tracing) return; - } -assert(!get_reentrant()); /* stop tracing Python memory allocations */ tracemalloc_config.tracing = 0; /* set the reentrant flag to detect bugs: fail with an assertion error if set_reentrant(1) is called while tracing is disabled. */ -DEBUG("tracemalloc_stop(): set_reentrant(1)"); set_reentrant(1); /* unregister the hook on memory allocators */ @@ -1143,8 +1094,6 @@ DEBUG("tracemalloc_stop(): set_reentrant(1)"); /* release memory */ raw_free(tracemalloc_traceback); tracemalloc_traceback = NULL; -DEBUG("tracemalloc_stop(): done"); -assert(get_reentrant()); } PyDoc_STRVAR(tracemalloc_is_tracing_doc, @@ -1512,11 +1461,8 @@ py_tracemalloc_start(PyObject *self, PyObject *args) } nframe_int = Py_SAFE_DOWNCAST(nframe, Py_ssize_t, int); - if (tracemalloc_start(nframe_int) < 0) { -DEBUG("start(): ERROR!"); + if (tracemalloc_start(nframe_int) < 0) return NULL; - } -DEBUG("start(): done"); Py_RETURN_NONE; } @@ -1642,17 +1588,12 @@ PyMODINIT_FUNC PyInit__tracemalloc(void) { PyObject *m; - -fprintf(stderr, "[pid %li, tid %li] PyInit__tracemalloc\n", (long)getpid(), PyThread_get_thread_ident()); fflush(stderr); - m = PyModule_Create(&module_def); if (m == NULL) return NULL; -#if 0 if (tracemalloc_init() < 0) return NULL; -#endif return m; }