mirror of
https://github.com/python/cpython.git
synced 2025-10-05 14:41:07 +00:00
Issue8757: Implicit set-to-frozenset conversion not thread-safe.
This commit is contained in:
parent
5e684339c2
commit
3ad323ecaf
2 changed files with 5 additions and 9 deletions
|
@ -12,6 +12,8 @@ What's New in Python 2.7.1?
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #83755: Implicit set-to-frozenset conversion was not thread-safe.
|
||||||
|
|
||||||
- Issue #9416: Fix some issues with complex formatting where the
|
- Issue #9416: Fix some issues with complex formatting where the
|
||||||
output with no type specifier failed to match the str output:
|
output with no type specifier failed to match the str output:
|
||||||
|
|
||||||
|
|
|
@ -1855,12 +1855,10 @@ set_contains(PySetObject *so, PyObject *key)
|
||||||
if (!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError))
|
if (!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError))
|
||||||
return -1;
|
return -1;
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
tmpkey = make_new_set(&PyFrozenSet_Type, NULL);
|
tmpkey = make_new_set(&PyFrozenSet_Type, key);
|
||||||
if (tmpkey == NULL)
|
if (tmpkey == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
|
|
||||||
rv = set_contains(so, tmpkey);
|
rv = set_contains(so, tmpkey);
|
||||||
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
|
|
||||||
Py_DECREF(tmpkey);
|
Py_DECREF(tmpkey);
|
||||||
}
|
}
|
||||||
return rv;
|
return rv;
|
||||||
|
@ -1890,12 +1888,10 @@ set_remove(PySetObject *so, PyObject *key)
|
||||||
if (!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError))
|
if (!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError))
|
||||||
return NULL;
|
return NULL;
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
tmpkey = make_new_set(&PyFrozenSet_Type, NULL);
|
tmpkey = make_new_set(&PyFrozenSet_Type, key);
|
||||||
if (tmpkey == NULL)
|
if (tmpkey == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
|
|
||||||
rv = set_discard_key(so, tmpkey);
|
rv = set_discard_key(so, tmpkey);
|
||||||
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
|
|
||||||
Py_DECREF(tmpkey);
|
Py_DECREF(tmpkey);
|
||||||
if (rv == -1)
|
if (rv == -1)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1924,12 +1920,10 @@ set_discard(PySetObject *so, PyObject *key)
|
||||||
if (!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError))
|
if (!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError))
|
||||||
return NULL;
|
return NULL;
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
tmpkey = make_new_set(&PyFrozenSet_Type, NULL);
|
tmpkey = make_new_set(&PyFrozenSet_Type, key);
|
||||||
if (tmpkey == NULL)
|
if (tmpkey == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
|
|
||||||
result = set_discard(so, tmpkey);
|
result = set_discard(so, tmpkey);
|
||||||
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
|
|
||||||
Py_DECREF(tmpkey);
|
Py_DECREF(tmpkey);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue