Issue #20437: Fixed 43 potential bugs when deleting objects references.
diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c
index dad1dcd..203bba2 100644
--- a/Modules/_bsddb.c
+++ b/Modules/_bsddb.c
@@ -949,8 +949,7 @@
* DBTxns and closing any open DBs first. */
if (makeDBError(err)) {
if (self->myenvobj) {
- Py_DECREF(self->myenvobj);
- self->myenvobj = NULL;
+ Py_CLEAR(self->myenvobj);
}
Py_DECREF(self);
self = NULL;
@@ -982,20 +981,16 @@
PyObject_ClearWeakRefs((PyObject *) self);
}
if (self->myenvobj) {
- Py_DECREF(self->myenvobj);
- self->myenvobj = NULL;
+ Py_CLEAR(self->myenvobj);
}
if (self->associateCallback != NULL) {
- Py_DECREF(self->associateCallback);
- self->associateCallback = NULL;
+ Py_CLEAR(self->associateCallback);
}
if (self->btCompareCallback != NULL) {
- Py_DECREF(self->btCompareCallback);
- self->btCompareCallback = NULL;
+ Py_CLEAR(self->btCompareCallback);
}
if (self->dupCompareCallback != NULL) {
- Py_DECREF(self->dupCompareCallback);
- self->dupCompareCallback = NULL;
+ Py_CLEAR(self->dupCompareCallback);
}
Py_DECREF(self->private_obj);
PyObject_Del(self);
@@ -1160,8 +1155,7 @@
PyErr_Clear();
}
- Py_XDECREF(self->event_notifyCallback);
- self->event_notifyCallback = NULL;
+ Py_CLEAR(self->event_notifyCallback);
if (self->in_weakreflist != NULL) {
PyObject_ClearWeakRefs((PyObject *) self);
@@ -1640,8 +1634,7 @@
MYDB_END_ALLOW_THREADS;
if (err) {
- Py_XDECREF(secondaryDB->associateCallback);
- secondaryDB->associateCallback = NULL;
+ Py_CLEAR(secondaryDB->associateCallback);
secondaryDB->primaryDBType = 0;
}