Issue #26588: more assertions

This commit is contained in:
Victor Stinner 2016-03-22 17:40:07 +01:00
parent ff9c5346ea
commit 0cfc058d61
1 changed files with 23 additions and 2 deletions

View File

@ -189,11 +189,11 @@ set_reentrant(int reentrant)
{ {
assert(reentrant == 0 || reentrant == 1); assert(reentrant == 0 || reentrant == 1);
if (reentrant) { if (reentrant) {
assert(PyThread_get_key_value(tracemalloc_reentrant_key) == NULL); assert(!get_reentrant());
PyThread_set_key_value(tracemalloc_reentrant_key, REENTRANT); PyThread_set_key_value(tracemalloc_reentrant_key, REENTRANT);
} }
else { else {
assert(PyThread_get_key_value(tracemalloc_reentrant_key) == REENTRANT); assert(get_reentrant());
PyThread_set_key_value(tracemalloc_reentrant_key, NULL); PyThread_set_key_value(tracemalloc_reentrant_key, NULL);
} }
} }
@ -901,6 +901,11 @@ static int
tracemalloc_init(void) tracemalloc_init(void)
{ {
DEBUG("tracemalloc_init()"); DEBUG("tracemalloc_init()");
#ifdef WITH_THREAD
assert(PyGILState_Check());
#endif
if (tracemalloc_config.initialized == TRACEMALLOC_FINALIZED) { if (tracemalloc_config.initialized == TRACEMALLOC_FINALIZED) {
PyErr_SetString(PyExc_RuntimeError, PyErr_SetString(PyExc_RuntimeError,
"the tracemalloc module has been unloaded"); "the tracemalloc module has been unloaded");
@ -1027,6 +1032,11 @@ tracemalloc_start(int max_nframe)
size_t size; size_t size;
DEBUG("tracemalloc_start()"); DEBUG("tracemalloc_start()");
#ifdef WITH_THREAD
assert(PyGILState_Check());
#endif
if (tracemalloc_init() < 0) { if (tracemalloc_init() < 0) {
DEBUG("tracemalloc_start(): ERROR! init failed!"); DEBUG("tracemalloc_start(): ERROR! init failed!");
return -1; return -1;
@ -1035,8 +1045,10 @@ DEBUG("tracemalloc_start(): ERROR! init failed!");
if (tracemalloc_config.tracing) { if (tracemalloc_config.tracing) {
/* hook already installed: do nothing */ /* hook already installed: do nothing */
DEBUG("tracemalloc_start(): exit (already tracing)"); DEBUG("tracemalloc_start(): exit (already tracing)");
assert(!get_reentrant());
return 0; return 0;
} }
assert(get_reentrant());
assert(1 <= max_nframe && max_nframe <= MAX_NFRAME); assert(1 <= max_nframe && max_nframe <= MAX_NFRAME);
tracemalloc_config.max_nframe = max_nframe; tracemalloc_config.max_nframe = max_nframe;
@ -1081,6 +1093,7 @@ DEBUG("tracemalloc_start(): set_reentrant(0)");
set_reentrant(0); set_reentrant(0);
DEBUG("tracemalloc_start(): done"); DEBUG("tracemalloc_start(): done");
assert(!get_reentrant());
return 0; return 0;
} }
@ -1089,10 +1102,17 @@ static void
tracemalloc_stop(void) tracemalloc_stop(void)
{ {
DEBUG("tracemalloc_stop()"); DEBUG("tracemalloc_stop()");
#ifdef WITH_THREAD
assert(PyGILState_Check());
#endif
if (!tracemalloc_config.tracing) { if (!tracemalloc_config.tracing) {
DEBUG("tracemalloc_stop(): exit (not tracing)"); DEBUG("tracemalloc_stop(): exit (not tracing)");
assert(get_reentrant());
return; return;
} }
assert(!get_reentrant());
/* stop tracing Python memory allocations */ /* stop tracing Python memory allocations */
tracemalloc_config.tracing = 0; tracemalloc_config.tracing = 0;
@ -1115,6 +1135,7 @@ DEBUG("tracemalloc_stop(): set_reentrant(1)");
raw_free(tracemalloc_traceback); raw_free(tracemalloc_traceback);
tracemalloc_traceback = NULL; tracemalloc_traceback = NULL;
DEBUG("tracemalloc_stop(): done"); DEBUG("tracemalloc_stop(): done");
assert(get_reentrant());
} }
PyDoc_STRVAR(tracemalloc_is_tracing_doc, PyDoc_STRVAR(tracemalloc_is_tracing_doc,