* spawn.cc (spawn_guts): Move system signal handling stuff after CreateProcess
error check.
This commit is contained in:
parent
cb86a98b3b
commit
b498c877a1
|
@ -1,3 +1,8 @@
|
|||
2003-09-25 Christopher Faylor <cgf@redhat.com>
|
||||
|
||||
* spawn.cc (spawn_guts): Move system signal handling stuff after
|
||||
CreateProcess error check.
|
||||
|
||||
2003-09-25 Pierre Humblet <pierre.humblet@ieee.org>
|
||||
|
||||
* shared_info.h: Update CURR_USER_MAGIC, CURR_SHARED_MAGIC and
|
||||
|
@ -35,15 +40,15 @@
|
|||
* shared.cc: Use sizeof(user_info) in "offsets".
|
||||
(user_shared_initialize): Add "reinit" argument to indicate need
|
||||
to reinitialize the mapping. Replace "mount_table" by "user_shared"
|
||||
throughout. Call user_shared->mountinfo.init and
|
||||
throughout. Call user_shared->mountinfo.init and
|
||||
user_shared->delqueue.init.
|
||||
(shared_info::initialize): Do not call delqueue.init.
|
||||
(memory_init): Add argument to user_shared_initialize.
|
||||
* child_info.h (child_info::mount_h): Delete.
|
||||
(child_info::user_h): New.
|
||||
* child_info.h (child_info::mount_h): Delete.
|
||||
(child_info::user_h): New.
|
||||
* sigpproc.cc (init_child_info): Use user_h instead of mount_h.
|
||||
* dcrt0.cc (_dll_crt0): Ditto.
|
||||
* fhandler_disk_file.cc (fhandler_disk_file::close): Use
|
||||
* fhandler_disk_file.cc (fhandler_disk_file::close): Use
|
||||
user_shared->delqueue instead of cygwin_shared->delqueue.
|
||||
* fhandler_virtual.cc (fhandler_virtual::close): Ditto.
|
||||
* syscalls.cc (close_all_files): Ditto.
|
||||
|
|
|
@ -709,21 +709,6 @@ spawn_guts (const char * prog_arg, const char *const *argv,
|
|||
&pi);
|
||||
}
|
||||
|
||||
/* FIXME: There is a small race here */
|
||||
|
||||
DWORD res;
|
||||
pthread_cleanup cleanup;
|
||||
pthread_cleanup_push (do_cleanup, (void *) &cleanup);
|
||||
if (mode == _P_SYSTEM)
|
||||
{
|
||||
sigset_t child_block;
|
||||
cleanup.oldint = signal (SIGINT, SIG_IGN);
|
||||
cleanup.oldquit = signal (SIGQUIT, SIG_IGN);
|
||||
sigemptyset (&child_block);
|
||||
sigaddset (&child_block, SIGCHLD);
|
||||
(void) sigprocmask (SIG_BLOCK, &child_block, &cleanup.oldmask);
|
||||
}
|
||||
|
||||
/* Restore impersonation. In case of _P_OVERLAY this isn't
|
||||
allowed since it would overwrite child data. */
|
||||
if (mode != _P_OVERLAY)
|
||||
|
@ -747,6 +732,21 @@ spawn_guts (const char * prog_arg, const char *const *argv,
|
|||
return -1;
|
||||
}
|
||||
|
||||
/* FIXME: There is a small race here */
|
||||
|
||||
DWORD res;
|
||||
pthread_cleanup cleanup;
|
||||
pthread_cleanup_push (do_cleanup, (void *) &cleanup);
|
||||
if (mode == _P_SYSTEM)
|
||||
{
|
||||
sigset_t child_block;
|
||||
cleanup.oldint = signal (SIGINT, SIG_IGN);
|
||||
cleanup.oldquit = signal (SIGQUIT, SIG_IGN);
|
||||
sigemptyset (&child_block);
|
||||
sigaddset (&child_block, SIGCHLD);
|
||||
(void) sigprocmask (SIG_BLOCK, &child_block, &cleanup.oldmask);
|
||||
}
|
||||
|
||||
/* Fixup the parent datastructure if needed and resume the child's
|
||||
main thread. */
|
||||
if (!cygheap->fdtab.need_fixup_before ())
|
||||
|
|
Loading…
Reference in New Issue