* fork.cc (fork_child): Fixup SYSV IPC shared memory before fixing

up fdtab.
This commit is contained in:
Corinna Vinschen 2005-04-01 11:47:00 +00:00
parent fefc73a0c7
commit b6e69d53f6
2 changed files with 16 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2005-04-01 Corinna Vinschen <corinna@vinschen.de>
* fork.cc (fork_child): Fixup SYSV IPC shared memory before fixing
up fdtab.
2005-03-31 Corinna Vinschen <corinna@vinschen.de> 2005-03-31 Corinna Vinschen <corinna@vinschen.de>
* gentls_offsets: Add '-m32' flag to native compiler call to satisfy * gentls_offsets: Add '-m32' flag to native compiler call to satisfy

View File

@ -199,6 +199,17 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls)
if (fixup_mmaps_after_fork (hParent)) if (fixup_mmaps_after_fork (hParent))
api_fatal ("recreate_mmaps_after_fork_failed"); api_fatal ("recreate_mmaps_after_fork_failed");
#ifdef USE_SERVER
/* Incredible but true: If we use sockets and SYSV IPC shared memory,
there's a good chance that a duplicated socket in the child occupies
memory which is needed to duplicate shared memory from the parent
process, if the shared memory hasn't been duplicated already.
The same goes very likely for "normal" mmap shared memory, too, but
with SYSV IPC it was the first time observed. So, *never* fixup
fdtab before fixing up shared memory. */
if (fixup_shms_after_fork ())
api_fatal ("recreate_shm areas after fork failed");
#endif
MALLOC_CHECK; MALLOC_CHECK;
@ -226,11 +237,6 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls)
_my_tls.fixup_after_fork (); _my_tls.fixup_after_fork ();
sigproc_init (); sigproc_init ();
#ifdef USE_SERVER
if (fixup_shms_after_fork ())
api_fatal ("recreate_shm areas after fork failed");
#endif
pthread::atforkchild (); pthread::atforkchild ();
fixup_timers_after_fork (); fixup_timers_after_fork ();
fixup_hooks_after_fork (); fixup_hooks_after_fork ();