Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions Modules/_threadmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,15 @@ typedef struct {
typedef struct {
PyObject_HEAD
PyMutex lock;
PyObject *weakreflist; /* List of weak references */
} lockobject;

#define lockobject_CAST(op) ((lockobject *)(op))

typedef struct {
PyObject_HEAD
_PyRecursiveMutex lock;
PyObject *weakreflist; /* List of weak references */
} rlockobject;

#define rlockobject_CAST(op) ((rlockobject *)(op))
Expand Down Expand Up @@ -767,7 +769,6 @@ static PyType_Spec ThreadHandle_Type_spec = {
static void
lock_dealloc(PyObject *self)
{
PyObject_GC_UnTrack(self);
PyObject_ClearWeakRefs(self);
PyTypeObject *tp = Py_TYPE(self);
tp->tp_free(self);
Expand Down Expand Up @@ -999,6 +1000,10 @@ lock_new_impl(PyTypeObject *type)
return (PyObject *)self;
}

static PyMemberDef lock_members[] = {
{"__weaklistoffset__", Py_T_PYSSIZET, offsetof(lockobject, weakreflist), Py_READONLY},
{NULL}
};

static PyMethodDef lock_methods[] = {
_THREAD_LOCK_ACQUIRE_LOCK_METHODDEF
Expand Down Expand Up @@ -1034,17 +1039,16 @@ static PyType_Slot lock_type_slots[] = {
{Py_tp_dealloc, lock_dealloc},
{Py_tp_repr, lock_repr},
{Py_tp_doc, (void *)lock_doc},
{Py_tp_members, lock_members},
{Py_tp_methods, lock_methods},
{Py_tp_traverse, _PyObject_VisitType},
{Py_tp_new, lock_new},
{0, 0}
};

static PyType_Spec lock_type_spec = {
.name = "_thread.lock",
.basicsize = sizeof(lockobject),
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_MANAGED_WEAKREF),
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE),
.slots = lock_type_slots,
};

Expand All @@ -1059,7 +1063,6 @@ rlock_locked_impl(rlockobject *self)
static void
rlock_dealloc(PyObject *self)
{
PyObject_GC_UnTrack(self);
PyObject_ClearWeakRefs(self);
PyTypeObject *tp = Py_TYPE(self);
tp->tp_free(self);
Expand Down Expand Up @@ -1319,6 +1322,11 @@ _thread_RLock__at_fork_reinit_impl(rlockobject *self)
#endif /* HAVE_FORK */


static PyMemberDef rlock_members[] = {
{"__weaklistoffset__", Py_T_PYSSIZET, offsetof(rlockobject, weakreflist), Py_READONLY},
{NULL}
};

static PyMethodDef rlock_methods[] = {
_THREAD_RLOCK_ACQUIRE_METHODDEF
_THREAD_RLOCK_RELEASE_METHODDEF
Expand All @@ -1339,18 +1347,18 @@ static PyMethodDef rlock_methods[] = {
static PyType_Slot rlock_type_slots[] = {
{Py_tp_dealloc, rlock_dealloc},
{Py_tp_repr, rlock_repr},
{Py_tp_members, rlock_members},
{Py_tp_methods, rlock_methods},
{Py_tp_alloc, PyType_GenericAlloc},
{Py_tp_new, rlock_new},
{Py_tp_traverse, _PyObject_VisitType},
{0, 0},
};

static PyType_Spec rlock_type_spec = {
.name = "_thread.RLock",
.basicsize = sizeof(rlockobject),
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_MANAGED_WEAKREF),
Py_TPFLAGS_IMMUTABLETYPE),
.slots = rlock_type_slots,
};

Expand Down
Loading