summaryrefslogtreecommitdiffstats
path: root/Objects/object.c
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/object.c')
-rw-r--r--Objects/object.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/Objects/object.c b/Objects/object.c
index 587c552..bbf7f98 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -2671,7 +2671,12 @@ _PyTrash_thread_deposit_object(struct _py_trashcan *trash, PyObject *op)
_PyObject_ASSERT(op, _PyObject_IS_GC(op));
_PyObject_ASSERT(op, !_PyObject_GC_IS_TRACKED(op));
_PyObject_ASSERT(op, Py_REFCNT(op) == 0);
+#ifdef Py_GIL_DISABLED
+ _PyObject_ASSERT(op, op->ob_tid == 0);
+ op->ob_tid = (uintptr_t)trash->delete_later;
+#else
_PyGCHead_SET_PREV(_Py_AS_GC(op), (PyGC_Head*)trash->delete_later);
+#endif
trash->delete_later = op;
}
@@ -2697,8 +2702,12 @@ _PyTrash_thread_destroy_chain(struct _py_trashcan *trash)
PyObject *op = trash->delete_later;
destructor dealloc = Py_TYPE(op)->tp_dealloc;
- trash->delete_later =
- (PyObject*) _PyGCHead_PREV(_Py_AS_GC(op));
+#ifdef Py_GIL_DISABLED
+ trash->delete_later = (PyObject*) op->ob_tid;
+ op->ob_tid = 0;
+#else
+ trash->delete_later = (PyObject*) _PyGCHead_PREV(_Py_AS_GC(op));
+#endif
/* Call the deallocator directly. This used to try to
* fool Py_DECREF into calling it indirectly, but