diff --git a/Objects/setobject.c b/Objects/setobject.c --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -160,7 +160,7 @@ cmp = PyObject_RichCompareBool(startkey, key, Py_EQ); Py_DECREF(startkey); if (cmp < 0) /* unlikely */ - return -1; + goto comparison_error; if (table != so->table || entry->key != startkey) /* unlikely */ return _set_add_entry(so, key, hash); if (cmp > 0) /* likely */ @@ -188,7 +188,7 @@ cmp = PyObject_RichCompareBool(startkey, key, Py_EQ); Py_DECREF(startkey); if (cmp < 0) - return -1; + goto comparison_error; if (table != so->table || entry->key != startkey) return _set_add_entry(so, key, hash); if (cmp > 0) @@ -223,24 +223,22 @@ entry->hash = hash; if ((size_t)so->fill*3 < mask*2) return 0; - if (!set_table_resize(so, so->used)) - return 0; - Py_INCREF(key); - return -1; + return set_table_resize(so, so->used); found_active: Py_DECREF(key); return 0; + + comparison_error: + Py_DECREF(key); + return -1; } static int set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash) { Py_INCREF(key); - if (!_set_add_entry(so, key, hash)) - return 0; - Py_DECREF(key); - return -1; + return _set_add_entry(so, key, hash); } /*