* 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>
|
2008-04-25 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* Makefile.in (install): Drop install rules for postinstall script.
|
* Makefile.in (install): Drop install rules for postinstall script.
|
||||||
|
|
|
@ -694,7 +694,7 @@ dll_crt0_0 ()
|
||||||
init_global_security ();
|
init_global_security ();
|
||||||
initial_env ();
|
initial_env ();
|
||||||
|
|
||||||
SetErrorMode (SEM_FAILCRITICALERRORS);
|
SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
||||||
|
|
||||||
/* Initialize signal processing here, early, in the hopes that the creation
|
/* Initialize signal processing here, early, in the hopes that the creation
|
||||||
of a thread early in the process will cause more predictability in memory
|
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");
|
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);
|
runpath = null_app_name ? NULL : real_path.get_wide_win32_path (runpath);
|
||||||
|
|
||||||
syscall_printf ("null_app_name %d (%W, %.9500W)", null_app_name,
|
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.lpReserved2 = (LPBYTE) &ch;
|
||||||
si.cbReserved2 = sizeof (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
|
/* When ruid != euid we create the new process under the current original
|
||||||
account and impersonate in child, this way maintaining the different
|
account and impersonate in child, this way maintaining the different
|
||||||
effective vs. real ids.
|
effective vs. real ids.
|
||||||
|
|
Loading…
Reference in New Issue