diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sysdeps/mach/hurd/fork.c | 4 |
2 files changed, 9 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index 23c900dcf7..eb604b854b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-08-28 Samuel Thibault <samuel.thibault@ens-lyon.org> + + * sysdeps/mach/hurd/fork.c (__fork): Lock SS->lock around + __proc_dostop call. + 2014-08-27 Mark Wielaard <mjw@redhat.com> [BZ #17319] diff --git a/sysdeps/mach/hurd/fork.c b/sysdeps/mach/hurd/fork.c index 60c34c7620..51bc2c0753 100644 --- a/sysdeps/mach/hurd/fork.c +++ b/sysdeps/mach/hurd/fork.c @@ -129,9 +129,13 @@ __fork (void) ports_locked = 1; + /* Keep our SS locked while stopping other threads, so they don't get a + chance to have it locked in the copied space. */ + __spin_lock (&ss->lock); /* Stop all other threads while copying the address space, so nothing changes. */ err = __proc_dostop (_hurd_ports[INIT_PORT_PROC].port, ss->thread); + __spin_unlock (&ss->lock); if (!err) { stopped = 1; |