diff options
author | Antoine Pitrou <pitrou@free.fr> | 2017-05-28 09:35:14 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-28 09:35:14 (GMT) |
commit | f7ecfac0c15f0c43ef5e6c0081eb3a059af9f074 (patch) | |
tree | dc86efb4f9610d3bf9e6338170621bdd1f244f58 | |
parent | eca7da0f13c78013b924fe7306f3e2e59c0af40b (diff) | |
download | cpython-f7ecfac0c15f0c43ef5e6c0081eb3a059af9f074.zip cpython-f7ecfac0c15f0c43ef5e6c0081eb3a059af9f074.tar.gz cpython-f7ecfac0c15f0c43ef5e6c0081eb3a059af9f074.tar.bz2 |
Doc nits for bpo-16500 (#1841)
* Doc nits for bpo-16500
* Fix more references
-rw-r--r-- | Doc/c-api/init.rst | 8 | ||||
-rw-r--r-- | Doc/whatsnew/3.7.rst | 9 | ||||
-rw-r--r-- | Lib/threading.py | 4 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Python/ceval.c | 8 | ||||
-rw-r--r-- | Python/import.c | 2 | ||||
-rw-r--r-- | Python/pystate.c | 2 | ||||
-rw-r--r-- | Python/thread.c | 2 |
8 files changed, 25 insertions, 13 deletions
diff --git a/Doc/c-api/init.rst b/Doc/c-api/init.rst index ca7636b..c12e1c7 100644 --- a/Doc/c-api/init.rst +++ b/Doc/c-api/init.rst @@ -564,7 +564,7 @@ Additionally, when extending or embedding Python, calling :c:func:`fork` directly rather than through :func:`os.fork` (and returning to or calling into Python) may result in a deadlock by one of Python's internal locks being held by a thread that is defunct after the fork. -:c:func:`PyOS_AfterFork` tries to reset the necessary locks, but is not +:c:func:`PyOS_AfterFork_Child` tries to reset the necessary locks, but is not always able to. @@ -675,9 +675,9 @@ code, or when embedding the Python interpreter: .. c:function:: void PyEval_ReInitThreads() - This function is called from :c:func:`PyOS_AfterFork` to ensure that newly - created child processes don't hold locks referring to threads which - are not running in the child process. + This function is called from :c:func:`PyOS_AfterFork_Child` to ensure + that newly created child processes don't hold locks referring to threads + which are not running in the child process. The following functions use thread-local storage, and are not compatible diff --git a/Doc/whatsnew/3.7.rst b/Doc/whatsnew/3.7.rst index 3195d90..761c85f 100644 --- a/Doc/whatsnew/3.7.rst +++ b/Doc/whatsnew/3.7.rst @@ -166,6 +166,10 @@ Serhiy Storchaka in :issue:`28682`.) Added support for :ref:`file descriptors <path_fd>` in :func:`~os.scandir` on Unix. (Contributed by Serhiy Storchaka in :issue:`25996`.) +New function :func:`os.register_at_fork` allows registering Python callbacks +to be executed on a process fork. (Contributed by Antoine Pitrou in +:issue:`16500`.) + unittest.mock ------------- @@ -243,6 +247,11 @@ Build and C API Changes * Added functions :c:func:`PySlice_Unpack` and :c:func:`PySlice_AdjustIndices`. (Contributed by Serhiy Storchaka in :issue:`27867`.) +* :c:func:`PyOS_AfterFork` is deprecated in favour of the new functions + :c:func:`PyOS_BeforeFork`, :c:func:`PyOS_AfterFork_Parent` and + :c:func:`PyOS_AfterFork_Child`. (Contributed by Antoine Pitrou in + :issue:`16500`.) + Deprecated ========== diff --git a/Lib/threading.py b/Lib/threading.py index 929a4b0..0b59464 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -1320,8 +1320,8 @@ except ImportError: def _after_fork(): # This function is called by Python/ceval.c:PyEval_ReInitThreads which - # is called from PyOS_AfterFork. Here we cleanup threading module state - # that should not exist after a fork. + # is called from PyOS_AfterFork_Child. Here we cleanup threading module + # state that should not exist after a fork. # Reset _active_limbo_lock, in case we forked while the lock was held # by another (non-forked) thread. http://bugs.python.org/issue874900 @@ -1052,6 +1052,9 @@ Windows C API ----- +- bpo-16500: Deprecate PyOS_AfterFork() and add PyOS_BeforeFork(), + PyOS_AfterFork_Parent() and PyOS_AfterFork_Child(). + - bpo-6532: The type of results of PyThread_start_new_thread() and PyThread_get_thread_ident(), and the id parameter of PyThreadState_SetAsyncExc() changed from "long" to "unsigned long". diff --git a/Python/ceval.c b/Python/ceval.c index 302070b..b114b5b 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -232,10 +232,10 @@ PyEval_ReleaseThread(PyThreadState *tstate) drop_gil(tstate); } -/* This function is called from PyOS_AfterFork to destroy all threads which are - * not running in the child process, and clear internal locks which might be - * held by those threads. (This could also be done using pthread_atfork - * mechanism, at least for the pthreads implementation.) */ +/* This function is called from PyOS_AfterFork_Child to destroy all threads + * which are not running in the child process, and clear internal locks + * which might be held by those threads. + */ void PyEval_ReInitThreads(void) diff --git a/Python/import.c b/Python/import.c index 17a320b..9a78d6a 100644 --- a/Python/import.c +++ b/Python/import.c @@ -194,7 +194,7 @@ _PyImport_ReleaseLock(void) return 1; } -/* This function is called from PyOS_AfterFork to ensure that newly +/* This function is called from PyOS_AfterFork_Child to ensure that newly created child processes do not share locks with the parent. We now acquire the import lock around fork() calls but on some platforms (Solaris 9 and earlier? see isue7242) that still left us with problems. */ diff --git a/Python/pystate.c b/Python/pystate.c index 064204d..0e62ee9 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -800,7 +800,7 @@ _PyGILState_Fini(void) autoInterpreterState = NULL; } -/* Reset the TLS key - called by PyOS_AfterFork(). +/* Reset the TLS key - called by PyOS_AfterFork_Child(). * This should not be necessary, but some - buggy - pthread implementations * don't reset TLS upon fork(), see issue #10517. */ diff --git a/Python/thread.c b/Python/thread.c index 8fa978a..ed697ac 100644 --- a/Python/thread.c +++ b/Python/thread.c @@ -325,7 +325,7 @@ PyThread_delete_key_value(int key) } /* Forget everything not associated with the current thread id. - * This function is called from PyOS_AfterFork(). It is necessary + * This function is called from PyOS_AfterFork_Child(). It is necessary * because other thread ids which were in use at the time of the fork * may be reused for new threads created in the forked process. */ |