Fix final round of gcc warnings relating to unused parameters.

* debug.cc (iscygthread): New function.
* debug.h: Declare it.
* exceptions.cc (set_process_mask): Flush pending signals.
(handle_sigsuspend): No need to flush pending signals.
(call_handler): Refine previous tests of muto ownership.  Only clear wait()'s
when we have definitely responded to a signal.
* fhandler_console.cc (fhandler_console::read): Don't set EINTR if executing in
a "cygwin" thread.
* sigproc.cc (proc_subproc): Use second argument to control whether CLEARWAIT
actually sets "signalled" flag.
* sync.h (muto): Add 'unstable' method.
This commit is contained in:
Christopher Faylor
2000-02-24 06:45:32 +00:00
parent fb87c246a7
commit 9aa07a8f60
9 changed files with 65 additions and 26 deletions

View File

@ -102,7 +102,7 @@ muto NO_COPY *sync_proc_subproc = NULL; // Control access to
// subproc stuff
DWORD NO_COPY maintid = 0; // ID of the main thread
Static DWORD sigtid = 0; // ID of the signal thread
DWORD NO_COPY sigtid = 0; // ID of the signal thread
int NO_COPY pending_signals = 0; // TRUE if signals pending
@ -245,7 +245,7 @@ proc_subproc (DWORD what, DWORD val)
int potential_match;
DWORD exitcode;
pinfo *child;
int clearing = 0;
int clearing;
waitq *w;
#define wval ((waitq *) val)
@ -316,7 +316,7 @@ proc_subproc (DWORD what, DWORD val)
/* Send a SIGCHLD to myself. */
rc = sig_send (myself_nowait, SIGCHLD); // Send a SIGCHLD
break; // Don't try to unlock. We don't have a lock.
break;
/* A child is in the stopped state. Scan wait() queue to see if anyone
* should be notified. (Called from wait_sig thread)
@ -324,6 +324,7 @@ proc_subproc (DWORD what, DWORD val)
case PROC_CHILDSTOPPED:
child = myself; // Just to avoid accidental NULL dereference
sip_printf ("Received stopped notification");
clearing = 0;
goto scan_wait;
/* Clear all waiting threads. Called from exceptions.cc prior to
@ -333,9 +334,8 @@ proc_subproc (DWORD what, DWORD val)
case PROC_CLEARWAIT:
/* Clear all "wait"ing threads. */
sip_printf ("clear waiting threads");
clearing = 1;
clearing = val;
case PROC_SIGCHLD:
scan_wait:
/* Scan the linked list of wait()ing threads. If a wait's parameters
* match this pid, then activate it.
@ -476,7 +476,7 @@ proc_terminate (void)
ForceCloseHandle1 (h, hwait_subproc);
sync_proc_subproc->acquire(WPSP);
(void) proc_subproc (PROC_CLEARWAIT, 0);
(void) proc_subproc (PROC_CLEARWAIT, 1);
lock_pinfo_for_update (INFINITE);
/* Clean out zombie processes from the pid list. */
@ -1205,6 +1205,8 @@ wait_sig (VOID *)
* array looking for any unprocessed signals.
*/
pending_signals = 0;
int saw_sigchld = 0;
int dispatched_sigchld = 0;
for (int sig = -__SIGOFFSET; sig < NSIG; sig++)
{
#ifdef NOSIGQUEUE
@ -1213,6 +1215,8 @@ wait_sig (VOID *)
while (InterlockedDecrement (myself->getsigtodo(sig)) >= 0)
#endif
{
if (sig == SIGCHLD)
saw_sigchld = 1;
if (sig > 0 && sig != SIGCONT && sig != SIGKILL && sig != SIGSTOP &&
(sigismember (& myself->getsigmask (), sig) ||
myself->process_state & PID_STOPPED))
@ -1247,9 +1251,8 @@ wait_sig (VOID *)
sip_printf ("Got signal %d", sig);
int wasdispatched = sig_handle (sig);
dispatched |= wasdispatched;
if (sig == SIGCHLD && !wasdispatched)
proc_subproc (PROC_SIGCHLD, 0);
dispatched |= sig_handle (sig);
if (sig == SIGCHLD && wasdispatched)
dispatched_sigchld = 1;
goto nextsig;
}
}
@ -1262,6 +1265,8 @@ wait_sig (VOID *)
continue;
}
if (saw_sigchld && !dispatched_sigchld)
proc_subproc (PROC_CLEARWAIT, 0);
/* Signal completion of signal handling depending on which semaphore
* woke up the WaitForMultipleObjects above.
*/