summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2012-11-11 18:39:35 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2012-11-11 18:39:35 (GMT)
commit898347056ab87592356e0646210acaa186b95fc4 (patch)
tree64d90cc10a5574bbfa4dab3d70ef8f5bfcd1e48d /Objects
parentcba149761a73e7c1aec7fdf6b310957b01d30520 (diff)
parente11fecb5a97595a91506eeba8fd5a185d35ace9e (diff)
downloadcpython-898347056ab87592356e0646210acaa186b95fc4.zip
cpython-898347056ab87592356e0646210acaa186b95fc4.tar.gz
cpython-898347056ab87592356e0646210acaa186b95fc4.tar.bz2
Issue #16453: Fix equality testing of dead weakref objects.
Also add tests for ordering and hashing.
Diffstat (limited to 'Objects')
-rw-r--r--Objects/weakrefobject.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c
index e07adb2..d3a4dd5 100644
--- a/Objects/weakrefobject.c
+++ b/Objects/weakrefobject.c
@@ -198,9 +198,13 @@ weakref_richcompare(PyWeakReference* self, PyWeakReference* other, int op)
}
if (PyWeakref_GET_OBJECT(self) == Py_None
|| PyWeakref_GET_OBJECT(other) == Py_None) {
- PyObject *res = self==other ? Py_True : Py_False;
- Py_INCREF(res);
- return res;
+ int res = (self == other);
+ if (op == Py_NE)
+ res = !res;
+ if (res)
+ Py_RETURN_TRUE;
+ else
+ Py_RETURN_FALSE;
}
return PyObject_RichCompare(PyWeakref_GET_OBJECT(self),
PyWeakref_GET_OBJECT(other), op);