https://github.com/python/cpython/commit/c005ea4951581bd5da7594f29594c9c840ec2fa5
commit: c005ea4951581bd5da7594f29594c9c840ec2fa5
branch: main
author: Victor Stinner <[email protected]>
committer: vstinner <[email protected]>
date: 2025-01-24T11:25:24+01:00
summary:
gh-129185: Use PyMutex in tracemalloc (#129246)
files:
M Include/internal/pycore_tracemalloc.h
M Python/tracemalloc.c
diff --git a/Include/internal/pycore_tracemalloc.h
b/Include/internal/pycore_tracemalloc.h
index 3fb0aa133fc41d..572e8025876319 100644
--- a/Include/internal/pycore_tracemalloc.h
+++ b/Include/internal/pycore_tracemalloc.h
@@ -70,7 +70,7 @@ struct _tracemalloc_runtime_state {
PyMemAllocatorEx obj;
} allocators;
- PyThread_type_lock tables_lock;
+ PyMutex tables_lock;
/* Size in bytes of currently traced memory.
Protected by TABLES_LOCK(). */
size_t traced_memory;
diff --git a/Python/tracemalloc.c b/Python/tracemalloc.c
index 20651016a80ec2..d27c2f9319ae58 100644
--- a/Python/tracemalloc.c
+++ b/Python/tracemalloc.c
@@ -3,6 +3,7 @@
#include "pycore_gc.h" // PyGC_Head
#include "pycore_hashtable.h" // _Py_hashtable_t
#include "pycore_initconfig.h" // _PyStatus_NO_MEMORY()
+#include "pycore_lock.h" // PyMutex_LockFlags()
#include "pycore_object.h" // _PyType_PreHeaderSize()
#include "pycore_pymem.h" // _Py_tracemalloc_config
#include "pycore_runtime.h" // _Py_ID()
@@ -37,8 +38,8 @@ static int _PyTraceMalloc_TraceRef(PyObject *op,
PyRefTracerEvent event,
the GIL held from PyMem_RawFree(). It cannot acquire the lock because it
would introduce a deadlock in _PyThreadState_DeleteCurrent(). */
#define tables_lock _PyRuntime.tracemalloc.tables_lock
-#define TABLES_LOCK() PyThread_acquire_lock(tables_lock, 1)
-#define TABLES_UNLOCK() PyThread_release_lock(tables_lock)
+#define TABLES_LOCK() PyMutex_LockFlags(&tables_lock, _Py_LOCK_DONT_DETACH)
+#define TABLES_UNLOCK() PyMutex_Unlock(&tables_lock)
#define DEFAULT_DOMAIN 0
@@ -741,13 +742,6 @@ _PyTraceMalloc_Init(void)
return _PyStatus_NO_MEMORY();
}
- if (tables_lock == NULL) {
- tables_lock = PyThread_allocate_lock();
- if (tables_lock == NULL) {
- return _PyStatus_NO_MEMORY();
- }
- }
-
tracemalloc_filenames = hashtable_new(hashtable_hash_pyobject,
hashtable_compare_unicode,
tracemalloc_clear_filename, NULL);
@@ -792,11 +786,6 @@ tracemalloc_deinit(void)
_Py_hashtable_destroy(tracemalloc_tracebacks);
_Py_hashtable_destroy(tracemalloc_filenames);
- if (tables_lock != NULL) {
- PyThread_free_lock(tables_lock);
- tables_lock = NULL;
- }
-
PyThread_tss_delete(&tracemalloc_reentrant_key);
}
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]