OSDN Git Service

* sigproc.cc (create_signal_arrive): New (temporary?) function to create
authorcgf <cgf>
Fri, 1 Apr 2005 15:27:45 +0000 (15:27 +0000)
committercgf <cgf>
Fri, 1 Apr 2005 15:27:45 +0000 (15:27 +0000)
signal_arrived event.
(sigproc_init): Use create_signal_arrived.
* fork.cc (fork_child): Create signal_arrived early.

winsup/cygwin/ChangeLog
winsup/cygwin/fork.cc
winsup/cygwin/sigproc.cc

index de66583..5b0f68d 100644 (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
index 4a84213..a2473ad 100644 (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
index c85847e..e17c744 100644 (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 ();