* spawn.cc (spawn_guts): Move system signal handling stuff after CreateProcess

error check.
This commit is contained in:
Christopher Faylor 2003-09-25 13:49:21 +00:00
parent cb86a98b3b
commit b498c877a1
2 changed files with 24 additions and 19 deletions

View File

@ -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.

View File

@ -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 ())