* exceptions.cc (call_handler): Make signal pending if sigsave.sig is still

active.
* syscalls.cc (_read): Don't clear errno.
* sigproc.cc (wait_sig): Don't scan the waiting process list after a SIGCHLD if
there are no zombies to reap.
* winsup.h: Use __builtin_strcmp.
* environ.cc (posify): Don't initialize len unless it is required
(from DJ Delorie <dj@redhat.com>).
This commit is contained in:
Christopher Faylor 2000-10-18 04:53:37 +00:00
parent 3f7bd53115
commit ac944e37d0
6 changed files with 22 additions and 6 deletions

View File

@ -1,3 +1,14 @@
Wed Oct 18 00:48:49 2000 Christopher Faylor <cgf@cygnus.com>
* exceptions.cc (call_handler): Make signal pending if sigsave.sig is
still active.
* syscalls.cc (_read): Don't clear errno.
* sigproc.cc (wait_sig): Don't scan the waiting process list after a
SIGCHLD if there are no zombies to reap.
* winsup.h: Use __builtin_strcmp.
* environ.cc (posify): Don't initialize len unless it is required
(from DJ Delorie <dj@redhat.com>).
Tue Oct 17 14:50:31 2000 Christopher Faylor <cgf@cygnus.com>
* sigproc.cc (proc_subproc): Remove unneeded test for correct process

View File

@ -113,11 +113,12 @@ posify (char **here, const char *value)
{
char *src = *here;
win_env *conv;
int len = strcspn (src, "=") + 1;
if (!(conv = getwinenv (src)))
return;
int len = strcspn (src, "=") + 1;
/* Turn all the items from c:<foo>;<bar> into their
mounted equivalents - if there is one. */

View File

@ -216,7 +216,7 @@ public:
/* This is the main stack frame info for this process. */
static NO_COPY stack_info thestack;
signal_dispatch sigsave;
static signal_dispatch sigsave;
/* Initialize everything needed to start iterating. */
void
@ -711,6 +711,9 @@ call_handler (int sig, struct sigaction& siga, void *handler)
mainthread.lock->acquire ();
if (sigsave.sig)
goto set_pending;
if (mainthread.frame)
{
ebp = mainthread.frame;

View File

@ -1195,7 +1195,7 @@ wait_sig (VOID *)
continue;
}
if (saw_sigchld && !dispatched_sigchld)
if (nzombies && saw_sigchld && !dispatched_sigchld)
proc_subproc (PROC_CLEARWAIT, 0);
/* Signal completion of signal handling depending on which semaphore
* woke up the WaitForMultipleObjects above.

View File

@ -212,7 +212,7 @@ _read (int fd, void *ptr, size_t len)
return -1;
}
set_sig_errno (0);
// set_sig_errno (0);
fhandler_base *fh = fdtab[fd];
DWORD wait = (fh->get_flags () & (O_NONBLOCK | OLD_O_NDELAY)) ? 0 : INFINITE;
@ -225,7 +225,7 @@ _read (int fd, void *ptr, size_t len)
else if (!fh->ready_for_read (fd, wait, 0))
{
if (!wait)
set_sig_errno (EAGAIN);
set_sig_errno (EAGAIN); /* Don't really need 'set_sig_errno' here, but... */
else
set_sig_errno (EINTR);
res = -1;

View File

@ -16,8 +16,9 @@ details. */
#ifdef __cplusplus
#define alloca(x) __builtin_alloca (x)
#define alloca __builtin_alloca
#define strlen __builtin_strlen
#define strcmp __builtin_strcmp
#define strcpy __builtin_strcpy
#define memcpy __builtin_memcpy
#define memcmp __builtin_memcmp