]> granicus.if.org Git - python/commitdiff
Add assertions on tracemalloc_reentrant_key
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 22 Mar 2016 16:45:09 +0000 (17:45 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Tue, 22 Mar 2016 16:45:09 +0000 (17:45 +0100)
Issue #26588.

Modules/_tracemalloc.c

index baeb58c16ecaad2cf63e79fbed1eaa4c38f88ea0..5c9f69e5d6645bd0c715fc4397c5325153167bf9 100644 (file)
@@ -167,7 +167,7 @@ tracemalloc_error(const char *format, ...)
 #  error "need native thread local storage (TLS)"
 #endif
 
-static int tracemalloc_reentrant_key;
+static int tracemalloc_reentrant_key = -1;
 
 /* Any non-NULL pointer can be used */
 #define REENTRANT Py_True
@@ -175,7 +175,10 @@ static int tracemalloc_reentrant_key;
 static int
 get_reentrant(void)
 {
-    void *ptr = PyThread_get_key_value(tracemalloc_reentrant_key);
+    void *ptr;
+
+    assert(tracemalloc_reentrant_key != -1);
+    ptr = PyThread_get_key_value(tracemalloc_reentrant_key);
     if (ptr != NULL) {
         assert(ptr == REENTRANT);
         return 1;
@@ -188,6 +191,8 @@ static void
 set_reentrant(int reentrant)
 {
     assert(reentrant == 0 || reentrant == 1);
+    assert(tracemalloc_reentrant_key != -1);
+
     if (reentrant) {
         assert(!get_reentrant());
         PyThread_set_key_value(tracemalloc_reentrant_key, REENTRANT);
@@ -1018,6 +1023,7 @@ DEBUG("tracemalloc_deinit(): exit (not initialized)");
 DEBUG("tracemalloc_deinit(): delete reentrant key");
 #ifdef REENTRANT_THREADLOCAL
     PyThread_delete_key(tracemalloc_reentrant_key);
+    tracemalloc_reentrant_key = -1;
 #endif
 
     Py_XDECREF(unknown_filename);