diff options
author | Benjamin Peterson <benjamin@python.org> | 2009-10-04 20:07:34 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2009-10-04 20:07:34 (GMT) |
commit | 9a779ea98ec7c0edff9fa9ff4a60b1fcc589a2b9 (patch) | |
tree | 967a76946006629b4b16689bbd6cb0f98f2b6bf8 /Modules | |
parent | 2e30440153dbd7864fa2201a43a48ebfec66b14b (diff) | |
download | cpython-9a779ea98ec7c0edff9fa9ff4a60b1fcc589a2b9.zip cpython-9a779ea98ec7c0edff9fa9ff4a60b1fcc589a2b9.tar.gz cpython-9a779ea98ec7c0edff9fa9ff4a60b1fcc589a2b9.tar.bz2 |
Merged revisions 74524,74556 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r74524 | gregory.p.smith | 2009-08-20 04:39:38 -0500 (Thu, 20 Aug 2009) | 2 lines
Add weakref support to the thread.lock type.
........
r74556 | kristjan.jonsson | 2009-08-27 17:20:21 -0500 (Thu, 27 Aug 2009) | 2 lines
issue 6275
Add an "exc_value" attribute to the _AssertRaisesContext context manager in the unittest package. This allows further tests on the exception that was raised after the context manager exits.
........
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_threadmodule.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 744e94d..4169698 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -3,6 +3,7 @@ /* Interface to Sjoerd's portable C thread library */ #include "Python.h" +#include "structmember.h" /* offsetof */ #ifndef WITH_THREAD #error "Error! The rest of Python is not compiled with thread support." @@ -20,12 +21,15 @@ static PyObject *ThreadError; typedef struct { PyObject_HEAD PyThread_type_lock lock_lock; + PyObject *in_weakreflist; } lockobject; static void lock_dealloc(lockobject *self) { assert(self->lock_lock); + if (self->in_weakreflist != NULL) + PyObject_ClearWeakRefs((PyObject *) self); /* Unlock the lock so it's safe to free it */ PyThread_acquire_lock(self->lock_lock, 0); PyThread_release_lock(self->lock_lock); @@ -140,12 +144,12 @@ static PyTypeObject Locktype = { 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /*tp_doc*/ 0, /*tp_traverse*/ 0, /*tp_clear*/ 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ + offsetof(lockobject, in_weakreflist), /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ lock_methods, /*tp_methods*/ @@ -159,6 +163,7 @@ newlockobject(void) if (self == NULL) return NULL; self->lock_lock = PyThread_allocate_lock(); + self->in_weakreflist = NULL; if (self->lock_lock == NULL) { PyObject_Del(self); self = NULL; |