diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-03-23 22:16:37 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-03-23 22:16:37 +0000 |
commit | 383052e98ce628ba1d5046ba663a8b70271e3eb8 (patch) | |
tree | 46ba6da9cfe81c919d99924591e70407cea55a63 /linuxthreads | |
parent | c0bc5f7b8fd62dfa566dd3adb91f3a1ee8db6aeb (diff) | |
download | glibc-383052e98ce628ba1d5046ba663a8b70271e3eb8.zip glibc-383052e98ce628ba1d5046ba663a8b70271e3eb8.tar.gz glibc-383052e98ce628ba1d5046ba663a8b70271e3eb8.tar.bz2 |
Update.
2000-03-23 Ulrich Drepper <drepper@redhat.com>
* resolv/netdb.h (SCOPE_DELIMITER): New definitions.
* inet/netinet/in.h (struct sockaddr_in6): Add sin6_scope_id
according to RFC 2553.
* sysdeps/posix/getaddrinfo.c: Change to follow latest RFC draft.
* inet/getnameinfo.c: Likewise.
Patches by YOSHIFUJI Hideaki <yoshfuji@v6.linux.or.jp>.
Diffstat (limited to 'linuxthreads')
-rw-r--r-- | linuxthreads/ChangeLog | 4 | ||||
-rw-r--r-- | linuxthreads/internals.h | 1 | ||||
-rw-r--r-- | linuxthreads/mutex.c | 12 | ||||
-rw-r--r-- | linuxthreads/ptfork.c | 1 |
4 files changed, 18 insertions, 0 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index 2a9683e..013e640 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,5 +1,9 @@ 2000-03-23 Ulrich Drepper <drepper@redhat.com> + * mutex.c (__pthread_reset_pthread_once): Reset once_masterlock. + * internals.h (__pthread_reset_pthread_once): Add prototype. + * ptfork.c (__fork): Call __pthread_reset_pthread_once. + * manager.c (pthread_handle_create): Store ID of new thread before clone call. diff --git a/linuxthreads/internals.h b/linuxthreads/internals.h index 3fcec42..8cb9b68 100644 --- a/linuxthreads/internals.h +++ b/linuxthreads/internals.h @@ -395,6 +395,7 @@ int __pthread_manager(void *reqfd); int __pthread_manager_event(void *reqfd); void __pthread_manager_sighandler(int sig); void __pthread_reset_main_thread(void); +void __pthread_reset_pthread_once(void); void __fresetlockfiles(void); void __pthread_manager_adjust_prio(int thread_prio); void __pthread_set_own_extricate_if(pthread_descr self, pthread_extricate_if *peif); diff --git a/linuxthreads/mutex.c b/linuxthreads/mutex.c index 06d97df..97b5a4f 100644 --- a/linuxthreads/mutex.c +++ b/linuxthreads/mutex.c @@ -223,3 +223,15 @@ int __pthread_once(pthread_once_t * once_control, void (*init_routine)(void)) return 0; } strong_alias (__pthread_once, pthread_once) + +/* + * This is called in the child process after a fork to make + * sure that the global mutex pthread_once is not held, + * and that the condition variable is reset to an initial state. + */ + +void __pthread_reset_pthread_once(void) +{ + pthread_mutex_init(&once_masterlock, NULL); + pthread_cond_init(&once_finished, NULL); +} diff --git a/linuxthreads/ptfork.c b/linuxthreads/ptfork.c index 1dfa8b6..4cd883f 100644 --- a/linuxthreads/ptfork.c +++ b/linuxthreads/ptfork.c @@ -89,6 +89,7 @@ pid_t __fork(void) pid = __libc_fork(); if (pid == 0) { __pthread_reset_main_thread(); + __pthread_reset_pthread_once(); __fresetlockfiles(); pthread_call_handlers(child); } else { |