|
3 | 3 | #include "pycore_gc.h" // PyGC_Head
|
4 | 4 | #include "pycore_hashtable.h" // _Py_hashtable_t
|
5 | 5 | #include "pycore_initconfig.h" // _PyStatus_NO_MEMORY()
|
| 6 | +#include "pycore_lock.h" // PyMutex_LockFlags() |
6 | 7 | #include "pycore_object.h" // _PyType_PreHeaderSize()
|
7 | 8 | #include "pycore_pymem.h" // _Py_tracemalloc_config
|
8 | 9 | #include "pycore_runtime.h" // _Py_ID()
|
@@ -37,8 +38,8 @@ static int _PyTraceMalloc_TraceRef(PyObject *op, PyRefTracerEvent event,
|
37 | 38 | the GIL held from PyMem_RawFree(). It cannot acquire the lock because it
|
38 | 39 | would introduce a deadlock in _PyThreadState_DeleteCurrent(). */
|
39 | 40 | #define tables_lock _PyRuntime.tracemalloc.tables_lock
|
40 |
| -#define TABLES_LOCK() PyThread_acquire_lock(tables_lock, 1) |
41 |
| -#define TABLES_UNLOCK() PyThread_release_lock(tables_lock) |
| 41 | +#define TABLES_LOCK() PyMutex_LockFlags(&tables_lock, _Py_LOCK_DONT_DETACH) |
| 42 | +#define TABLES_UNLOCK() PyMutex_Unlock(&tables_lock) |
42 | 43 |
|
43 | 44 |
|
44 | 45 | #define DEFAULT_DOMAIN 0
|
@@ -741,13 +742,6 @@ _PyTraceMalloc_Init(void)
|
741 | 742 | return _PyStatus_NO_MEMORY();
|
742 | 743 | }
|
743 | 744 |
|
744 |
| - if (tables_lock == NULL) { |
745 |
| - tables_lock = PyThread_allocate_lock(); |
746 |
| - if (tables_lock == NULL) { |
747 |
| - return _PyStatus_NO_MEMORY(); |
748 |
| - } |
749 |
| - } |
750 |
| - |
751 | 745 | tracemalloc_filenames = hashtable_new(hashtable_hash_pyobject,
|
752 | 746 | hashtable_compare_unicode,
|
753 | 747 | tracemalloc_clear_filename, NULL);
|
@@ -792,11 +786,6 @@ tracemalloc_deinit(void)
|
792 | 786 | _Py_hashtable_destroy(tracemalloc_tracebacks);
|
793 | 787 | _Py_hashtable_destroy(tracemalloc_filenames);
|
794 | 788 |
|
795 |
| - if (tables_lock != NULL) { |
796 |
| - PyThread_free_lock(tables_lock); |
797 |
| - tables_lock = NULL; |
798 |
| - } |
799 |
| - |
800 | 789 | PyThread_tss_delete(&tracemalloc_reentrant_key);
|
801 | 790 | }
|
802 | 791 |
|
|
0 commit comments