This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.24-178-ge67f54a
- From: sthibaul at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 21 Sep 2016 23:47:22 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.24-178-ge67f54a
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via e67f54ab1a6253dd69cb2c770d785c7eb6d2172c (commit)
from 87ab10d6524fe4faabd7eb3eac5868165ecfb323 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=e67f54ab1a6253dd69cb2c770d785c7eb6d2172c
commit e67f54ab1a6253dd69cb2c770d785c7eb6d2172c
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date: Thu Sep 22 01:45:48 2016 +0200
hurdmalloc: Run fork handler as late as possible [BZ #19431]
This is the hurd-specific follow-up for
29d794863cd6e03115d3670707cc873a9965ba92 : hurdmalloc also needs the
same fix
* hurd/hurdmalloc.c (malloc_fork_prepare): Rename to
_hurd_malloc_fork_prepare.
(malloc_fork_parent): Rename to _hurd_malloc_fork_parent.
(malloc_fork_child): Rename to _hurd_malloc_fork_child.
(_hurd_fork_prepare_hook): Drop malloc_fork_prepare.
(_hurd_fork_parent_hook): Drop malloc_fork_parent.
(_hurd_fork_child_hook): Drop malloc_fork_child.
* hurd/hurdmalloc.h (_hurd_malloc_fork_prepare,
_hurd_malloc_fork_parent, _hurd_malloc_fork_child): Add declarations.
* sysdeps/mach/hurd/fork.c (__fork): Call __malloc_fork_lock_parent
after locking locks (notably hurd_dtable_lock). Call
_hurd_malloc_fork_prepare after that. Call _hurd_malloc_fork_parent
before __malloc_fork_unlock_parent and _hurd_malloc_fork_child before
__malloc_fork_unlock_child.
diff --git a/ChangeLog b/ChangeLog
index e928977..b2add6a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2016-09-22 Samuel Thibault <samuel.thibault@ens-lyon.org>
+
+ * hurd/hurdmalloc.c (malloc_fork_prepare): Rename to
+ _hurd_malloc_fork_prepare.
+ (malloc_fork_parent): Rename to _hurd_malloc_fork_parent.
+ (malloc_fork_child): Rename to _hurd_malloc_fork_child.
+ (_hurd_fork_prepare_hook): Drop malloc_fork_prepare.
+ (_hurd_fork_parent_hook): Drop malloc_fork_parent.
+ (_hurd_fork_child_hook): Drop malloc_fork_child.
+ * hurd/hurdmalloc.h (_hurd_malloc_fork_prepare,
+ _hurd_malloc_fork_parent, _hurd_malloc_fork_child): Add declarations.
+ * sysdeps/mach/hurd/fork.c (__fork): Call __malloc_fork_lock_parent
+ after locking locks (notably hurd_dtable_lock). Call
+ _hurd_malloc_fork_prepare after that. Call _hurd_malloc_fork_parent
+ before __malloc_fork_unlock_parent and _hurd_malloc_fork_child before
+ __malloc_fork_unlock_child.
+
2016-09-21 James Greenhalgh <james.greenhalgh@arm.com>
* soft-fp/extendhftf2.c: New.
diff --git a/hurd/hurdmalloc.c b/hurd/hurdmalloc.c
index 58c29fa..65fb959 100644
--- a/hurd/hurdmalloc.c
+++ b/hurd/hurdmalloc.c
@@ -405,8 +405,8 @@ print_malloc_free_list (void)
}
#endif /* DEBUG */
-static void
-malloc_fork_prepare(void)
+void
+_hurd_malloc_fork_prepare(void)
/*
* Prepare the malloc module for a fork by insuring that no thread is in a
* malloc critical section.
@@ -419,8 +419,8 @@ malloc_fork_prepare(void)
}
}
-static void
-malloc_fork_parent(void)
+void
+_hurd_malloc_fork_parent(void)
/*
* Called in the parent process after a fork() to resume normal operation.
*/
@@ -432,8 +432,8 @@ malloc_fork_parent(void)
}
}
-static void
-malloc_fork_child(void)
+void
+_hurd_malloc_fork_child(void)
/*
* Called in the child process after a fork() to resume normal operation.
*/
@@ -446,7 +446,4 @@ malloc_fork_child(void)
}
-text_set_element (_hurd_fork_prepare_hook, malloc_fork_prepare);
-text_set_element (_hurd_fork_parent_hook, malloc_fork_parent);
-text_set_element (_hurd_fork_child_hook, malloc_fork_child);
text_set_element (_hurd_preinit_hook, malloc_init);
diff --git a/hurd/hurdmalloc.h b/hurd/hurdmalloc.h
index e11c208..3520ffa 100644
--- a/hurd/hurdmalloc.h
+++ b/hurd/hurdmalloc.h
@@ -12,6 +12,10 @@ extern void *_hurd_malloc (size_t);
extern void *_hurd_realloc (void *, size_t);
extern void _hurd_free (void *);
+extern void _hurd_malloc_fork_prepare (void);
+extern void _hurd_malloc_fork_parent (void);
+extern void _hurd_malloc_fork_child (void);
+
#define malloc _hurd_malloc
#define realloc _hurd_realloc
#define free _hurd_free
diff --git a/sysdeps/mach/hurd/fork.c b/sysdeps/mach/hurd/fork.c
index 9973b1b..9e863a8 100644
--- a/sysdeps/mach/hurd/fork.c
+++ b/sysdeps/mach/hurd/fork.c
@@ -108,12 +108,6 @@ __fork (void)
/* Run things that prepare for forking before we create the task. */
RUN_HOOK (_hurd_fork_prepare_hook, ());
- /* Acquire malloc locks. This needs to come last because fork
- handlers may use malloc, and the libio list lock has an
- indirect malloc dependency as well (via the getdelim
- function). */
- call_function_static_weak (__malloc_fork_lock_parent);
-
/* Lock things that want to be locked before we fork. */
{
void *const *p;
@@ -124,6 +118,13 @@ __fork (void)
}
__mutex_lock (&_hurd_siglock);
+ /* Acquire malloc locks. This needs to come last because fork
+ handlers may use malloc, and the libio list lock has an
+ indirect malloc dependency as well (via the getdelim
+ function). */
+ call_function_static_weak (__malloc_fork_lock_parent);
+ _hurd_malloc_fork_prepare ();
+
newtask = MACH_PORT_NULL;
thread = sigthread = MACH_PORT_NULL;
newproc = MACH_PORT_NULL;
@@ -612,6 +613,7 @@ __fork (void)
}
/* Release malloc locks. */
+ _hurd_malloc_fork_parent ();
call_function_static_weak (__malloc_fork_unlock_parent);
/* Run things that want to run in the parent to restore it to
@@ -666,6 +668,7 @@ __fork (void)
__sigemptyset (&_hurdsig_traced);
/* Release malloc locks. */
+ _hurd_malloc_fork_child ();
call_function_static_weak (__malloc_fork_unlock_child);
/* Run things that want to run in the child task to set up. */
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 17 +++++++++++++++++
hurd/hurdmalloc.c | 15 ++++++---------
hurd/hurdmalloc.h | 4 ++++
sysdeps/mach/hurd/fork.c | 15 +++++++++------
4 files changed, 36 insertions(+), 15 deletions(-)
hooks/post-receive
--
GNU C Library master sources