* dcrt0.cc (dll_crt0_0): Set SEM_NOGPFAULTERRORBOX error mode, too,
to accommodate Vista/Longhorn. * spawn.cc (spawn_guts): Move check for CREATE_SUSPENDED condition after the call to ch.set() since it depends on it.
This commit is contained in:
parent
e331d3e26e
commit
346cdb434e
@ -1,3 +1,10 @@
|
||||
2008-04-26 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* dcrt0.cc (dll_crt0_0): Set SEM_NOGPFAULTERRORBOX error mode, too,
|
||||
to accommodate Vista/Longhorn.
|
||||
* spawn.cc (spawn_guts): Move check for CREATE_SUSPENDED condition
|
||||
after the call to ch.set() since it depends on it.
|
||||
|
||||
2008-04-25 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* Makefile.in (install): Drop install rules for postinstall script.
|
||||
|
@ -694,7 +694,7 @@ dll_crt0_0 ()
|
||||
init_global_security ();
|
||||
initial_env ();
|
||||
|
||||
SetErrorMode (SEM_FAILCRITICALERRORS);
|
||||
SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
||||
|
||||
/* Initialize signal processing here, early, in the hopes that the creation
|
||||
of a thread early in the process will cause more predictability in memory
|
||||
|
@ -471,15 +471,6 @@ spawn_guts (const char *prog_arg, const char *const *argv,
|
||||
system_printf ("duplicate to pid_handle failed, %E");
|
||||
}
|
||||
|
||||
/* Some file types (currently only sockets) need extra effort in the parent
|
||||
after CreateProcess and before copying the datastructures to the child.
|
||||
So we have to start the child in suspend state, unfortunately, to avoid
|
||||
a race condition. */
|
||||
if (!newargv.win16_exe
|
||||
&& (!ch.iscygwin () || mode != _P_OVERLAY
|
||||
|| cygheap->fdtab.need_fixup_before ()))
|
||||
c_flags |= CREATE_SUSPENDED;
|
||||
|
||||
runpath = null_app_name ? NULL : real_path.get_wide_win32_path (runpath);
|
||||
|
||||
syscall_printf ("null_app_name %d (%W, %.9500W)", null_app_name,
|
||||
@ -506,6 +497,15 @@ spawn_guts (const char *prog_arg, const char *const *argv,
|
||||
si.lpReserved2 = (LPBYTE) &ch;
|
||||
si.cbReserved2 = sizeof (ch);
|
||||
|
||||
/* Depends on ch.set call above!
|
||||
Some file types might need extra effort in the parent after CreateProcess
|
||||
and before copying the datastructures to the child. So we have to start
|
||||
the child in suspend state, unfortunately, to avoid a race condition. */
|
||||
if (!newargv.win16_exe
|
||||
&& (!ch.iscygwin () || mode != _P_OVERLAY
|
||||
|| cygheap->fdtab.need_fixup_before ()))
|
||||
c_flags |= CREATE_SUSPENDED;
|
||||
|
||||
/* When ruid != euid we create the new process under the current original
|
||||
account and impersonate in child, this way maintaining the different
|
||||
effective vs. real ids.
|
||||
|
Loading…
Reference in New Issue
Block a user