mirror of
https://github.com/python/cpython.git
synced 2025-09-19 15:10:58 +00:00
[3.11] bpo-40514: Drop EXPERIMENTAL_ISOLATED_SUBINTERPRETERS (gh-93185) (GH-93306)
(cherry picked from commit caa279d6fd
)
This was added for bpo-40514 (gh-84694) to test out a per-interpreter GIL. However, it has since proven unnecessary to keep the experiment in the repo. (It can be done as a branch in a fork like normal.) So here we are removing:
* the configure option
* the macro
* the code enabled by the macro
Automerge-Triggered-By: GH:ericsnowcurrently
This commit is contained in:
parent
cf63b80bc4
commit
36374251aa
18 changed files with 10 additions and 234 deletions
|
@ -219,11 +219,6 @@ extern "C" {
|
|||
# define OVERALLOCATE_FACTOR 4
|
||||
#endif
|
||||
|
||||
/* bpo-40521: Interned strings are shared by all interpreters. */
|
||||
#ifndef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
|
||||
# define INTERNED_STRINGS
|
||||
#endif
|
||||
|
||||
/* This dictionary holds all interned unicode strings. Note that references
|
||||
to strings in this dictionary are *not* counted in the string's ob_refcnt.
|
||||
When the interned string reaches a refcnt of 0 the string deallocation
|
||||
|
@ -232,9 +227,7 @@ extern "C" {
|
|||
Another way to look at this is that to say that the actual reference
|
||||
count of a string is: s->ob_refcnt + (s->state ? 2 : 0)
|
||||
*/
|
||||
#ifdef INTERNED_STRINGS
|
||||
static PyObject *interned = NULL;
|
||||
#endif
|
||||
|
||||
/* Forward declaration */
|
||||
static inline int
|
||||
|
@ -1924,10 +1917,8 @@ unicode_dealloc(PyObject *unicode)
|
|||
switch (PyUnicode_CHECK_INTERNED(unicode)) {
|
||||
case SSTATE_NOT_INTERNED:
|
||||
break;
|
||||
|
||||
case SSTATE_INTERNED_MORTAL:
|
||||
{
|
||||
#ifdef INTERNED_STRINGS
|
||||
/* Revive the dead object temporarily. PyDict_DelItem() removes two
|
||||
references (key and value) which were ignored by
|
||||
PyUnicode_InternInPlace(). Use refcnt=3 rather than refcnt=2
|
||||
|
@ -1941,7 +1932,6 @@ unicode_dealloc(PyObject *unicode)
|
|||
}
|
||||
assert(Py_REFCNT(unicode) == 1);
|
||||
Py_SET_REFCNT(unicode, 0);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -11314,13 +11304,11 @@ _PyUnicode_EqualToASCIIId(PyObject *left, _Py_Identifier *right)
|
|||
if (PyUnicode_CHECK_INTERNED(left))
|
||||
return 0;
|
||||
|
||||
#ifdef INTERNED_STRINGS
|
||||
assert(_PyUnicode_HASH(right_uni) != -1);
|
||||
Py_hash_t hash = _PyUnicode_HASH(left);
|
||||
if (hash != -1 && hash != _PyUnicode_HASH(right_uni)) {
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
return unicode_compare_eq(left, right_uni);
|
||||
}
|
||||
|
@ -15562,7 +15550,6 @@ PyUnicode_InternInPlace(PyObject **p)
|
|||
return;
|
||||
}
|
||||
|
||||
#ifdef INTERNED_STRINGS
|
||||
if (PyUnicode_READY(s) == -1) {
|
||||
PyErr_Clear();
|
||||
return;
|
||||
|
@ -15593,11 +15580,6 @@ PyUnicode_InternInPlace(PyObject **p)
|
|||
this. */
|
||||
Py_SET_REFCNT(s, Py_REFCNT(s) - 2);
|
||||
_PyUnicode_STATE(s).interned = SSTATE_INTERNED_MORTAL;
|
||||
#else
|
||||
// PyDict expects that interned strings have their hash
|
||||
// (PyASCIIObject.hash) already computed.
|
||||
(void)unicode_hash(s);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue