diff options
Diffstat (limited to 'linuxthreads')
-rw-r--r-- | linuxthreads/ChangeLog | 6 | ||||
-rw-r--r-- | linuxthreads/linuxthreads.texi | 11 | ||||
-rw-r--r-- | linuxthreads/man/pthread_atfork.man | 13 |
3 files changed, 14 insertions, 16 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index a926600e85..2b55b8fcfb 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,9 @@ +2001-12-14 Ulrich Drepper <drepper@redhat.com> + + * man/pthread_atfork.man: Adjust description of mutex handling + after fork for current implementation. + * linuxthreads.texi: Likewise [PR libc/2519]. + 2001-12-13 Andreas Schwab <schwab@suse.de> * specific.c (pthread_key_delete): Don't contact the thread diff --git a/linuxthreads/linuxthreads.texi b/linuxthreads/linuxthreads.texi index 9513a67a6a..b4d83c9dee 100644 --- a/linuxthreads/linuxthreads.texi +++ b/linuxthreads/linuxthreads.texi @@ -1395,12 +1395,10 @@ pocess image. To understand the purpose of @code{pthread_atfork}, recall that @code{fork} duplicates the whole memory space, including mutexes in their current locking state, but only the calling thread: other threads -are not running in the child process. Thus, if a mutex is locked by a -thread other than the thread calling @code{fork}, that mutex will remain -locked forever in the child process, possibly blocking the execution of -the child process. Or if some shared data, such as a linked list, was in the -middle of being updated by a thread in the parent process, the child -will get a copy of the incompletely updated data which it cannot use. +are not running in the child process. The mutexes are not usable after +the @code{fork} and must be initialized with @code{pthread_mutex_init} +in the child process. This is a limitation of the current +implementation and might or might not be present in future versions. To avoid this, install handlers with @code{pthread_atfork} as follows: have the @var{prepare} handler lock the mutexes (in locking order), and the @@ -1627,4 +1625,3 @@ of a mapping of user threads to kernel threads. It exists for source compatibility. However, it will return the value that was set by the last call to @code{pthread_setconcurrency}. @end deftypefun - diff --git a/linuxthreads/man/pthread_atfork.man b/linuxthreads/man/pthread_atfork.man index 4d06a56f8b..b682bed3ac 100644 --- a/linuxthreads/man/pthread_atfork.man +++ b/linuxthreads/man/pthread_atfork.man @@ -30,15 +30,10 @@ while the |parent| and |child| handlers are called in FIFO order To understand the purpose of !pthread_atfork!, recall that !fork!(2) duplicates the whole memory space, including mutexes in their current locking state, but only the calling thread: other threads are not -running in the child process. Thus, if a mutex is locked by a thread -other than the thread calling !fork!, that mutex will remain locked -forever in the child process, possibly blocking the execution of the -child process. To avoid this, install handlers with !pthread_atfork! -as follows: the |prepare| handler locks the global mutexes (in locking -order), and the |parent| and |child| handlers unlock them (in -reverse order). Alternatively, |prepare| and |parent| can be set to -!NULL! and |child| to a function that calls !pthread_mutex_init! on -the global mutexes. +running in the child process. The mutexes are not usable after the +!fork! and must be initialized with |pthread_mutex_init| in the child +process. This is a limitation of the current implementation and might +or might not be present in future versions. .SH "RETURN VALUE" |