Issue #13156: revert changeset f6feed6ec3f9, which was only relevant for native

TLS implementations, and fails with the ad-hoc TLS implementation when a thread
doesn't have an auto thread state (e.g. a thread created outside of Python
calling into a subinterpreter).
This commit is contained in:
Charles-François Natali 2011-10-12 21:07:54 +02:00
parent 4394e0db24
commit 1f3ff7bc3f
4 changed files with 0 additions and 23 deletions

View File

@ -111,7 +111,6 @@ PyAPI_FUNC(void) PyThreadState_Clear(PyThreadState *);
PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *); PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *);
#ifdef WITH_THREAD #ifdef WITH_THREAD
PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void); PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void);
PyAPI_FUNC(void) _PyGILState_Reinit(void);
#endif #endif
PyAPI_FUNC(PyThreadState *) PyThreadState_Get(void); PyAPI_FUNC(PyThreadState *) PyThreadState_Get(void);

View File

@ -61,10 +61,6 @@ Core and Builtins
Library Library
------- -------
- Issue #10517: After fork(), reinitialize the TLS used by the PyGILState_*
APIs, to avoid a crash with the pthread implementation in RHEL 5. Patch
by Charles-François Natali.
- Issue #11763: don't use difflib in TestCase.assertMultiLineEqual if the - Issue #11763: don't use difflib in TestCase.assertMultiLineEqual if the
strings are too long. strings are too long.

View File

@ -976,7 +976,6 @@ void
PyOS_AfterFork(void) PyOS_AfterFork(void)
{ {
#ifdef WITH_THREAD #ifdef WITH_THREAD
_PyGILState_Reinit();
PyEval_ReInitThreads(); PyEval_ReInitThreads();
main_thread = PyThread_get_thread_ident(); main_thread = PyThread_get_thread_ident();
main_pid = getpid(); main_pid = getpid();

View File

@ -537,23 +537,6 @@ _PyGILState_Fini(void)
autoInterpreterState = NULL; autoInterpreterState = NULL;
} }
/* Reset the TLS key - called by PyOS_AfterFork.
* This should not be necessary, but some - buggy - pthread implementations
* don't flush TLS on fork, see issue #10517.
*/
void
_PyGILState_Reinit(void)
{
PyThreadState *tstate = PyGILState_GetThisThreadState();
PyThread_delete_key(autoTLSkey);
if ((autoTLSkey = PyThread_create_key()) == -1)
Py_FatalError("Could not allocate TLS entry");
/* re-associate the current thread state with the new key */
if (PyThread_set_key_value(autoTLSkey, (void *)tstate) < 0)
Py_FatalError("Couldn't create autoTLSkey mapping");
}
/* When a thread state is created for a thread by some mechanism other than /* When a thread state is created for a thread by some mechanism other than
PyGILState_Ensure, it's important that the GILState machinery knows about PyGILState_Ensure, it's important that the GILState machinery knows about
it so it doesn't try to create another thread state for the thread (this is it so it doesn't try to create another thread state for the thread (this is