* sigproc.cc (create_signal_arrive): New (temporary?) function to create

signal_arrived event.
(sigproc_init): Use create_signal_arrived.
* fork.cc (fork_child): Create signal_arrived early.
This commit is contained in:
Christopher Faylor 2005-04-01 15:27:52 +00:00
parent b6e69d53f6
commit d0bed66e45
3 changed files with 27 additions and 10 deletions

View File

@ -1,3 +1,10 @@
2005-04-01 Christopher Faylor <cgf@timesys.com>
* sigproc.cc (create_signal_arrive): New (temporary?) function to
create signal_arrived event.
(sigproc_init): Use create_signal_arrived.
* fork.cc (fork_child): Create signal_arrived early.
2005-04-01 Corinna Vinschen <corinna@vinschen.de>
* fork.cc (fork_child): Fixup SYSV IPC shared memory before fixing

View File

@ -156,6 +156,7 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls)
{
extern void fixup_hooks_after_fork ();
extern void fixup_timers_after_fork ();
extern void create_signal_arrived ();
debug_printf ("child is running. pid %d, ppid %d, stack here %p",
myself->pid, myself->ppid, __builtin_frame_address (0));
@ -199,6 +200,8 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls)
if (fixup_mmaps_after_fork (hParent))
api_fatal ("recreate_mmaps_after_fork_failed");
create_signal_arrived ();
#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

View File

@ -462,13 +462,23 @@ sig_dispatch_pending (bool fast)
(void) sig_send (myself, fast ? __SIGFLUSHFAST : __SIGFLUSH);
}
void __stdcall
create_signal_arrived ()
{
if (signal_arrived)
return;
/* local event signaled when main thread has been dispatched
to a signal handler function. */
signal_arrived = CreateEvent (&sec_none_nih, TRUE, FALSE, NULL);
ProtectHandle (signal_arrived);
}
/* Message initialization. Called from dll_crt0_1
*
* This routine starts the signal handling thread. The wait_sig_inited
* event is used to signal that the thread is ready to handle signals.
* We don't wait for this during initialization but instead detect it
* in sig_send to gain a little concurrency.
*/
This routine starts the signal handling thread. The wait_sig_inited
event is used to signal that the thread is ready to handle signals.
We don't wait for this during initialization but instead detect it
in sig_send to gain a little concurrency. */
void __stdcall
sigproc_init ()
{
@ -480,10 +490,7 @@ sigproc_init ()
*/
new_muto (sync_proc_subproc);
/* local event signaled when main thread has been dispatched
to a signal handler function. */
signal_arrived = CreateEvent (&sec_none_nih, TRUE, FALSE, NULL);
ProtectHandle (signal_arrived);
create_signal_arrived ();
hwait_sig = new cygthread (wait_sig, cygself, "sig");
hwait_sig->zap_h ();