Hi Mark, Thanks for sigtimedwait! Two questions:
On Dec 13 22:54, Mark Geisert wrote:
> diff --git a/winsup/cygwin/signal.cc b/winsup/cygwin/signal.cc
> index 69c5e2aad..0599d8a3e 100644
> --- a/winsup/cygwin/signal.cc
> +++ b/winsup/cygwin/signal.cc
> [...]
> + }
> + cwaittime.QuadPart = (LONGLONG) timeout->tv_sec * NSPERSEC
> + + ((LONGLONG) timeout->tv_nsec + 99LL) / 100LL;
> + }
> +
> + return sigwait_common (set, info, timeout ? &cwaittime : cw_infinite);
Would you mind to change the name of cwaittime to waittime throughout?
The leading "cw" actually puzzeled me for a while since I misinterpreted
it as one of the cw_* constants. No idea if it's just my bad eyes, but
dropping the leading c might raise readability a bit.
> +static int
> +sigwait_common (const sigset_t *set, siginfo_t *info, PLARGE_INTEGER
> cwaittime)
> {
> int res = -1;
>
> @@ -602,7 +630,7 @@ sigwaitinfo (const sigset_t *set, siginfo_t *info)
> set_signal_mask (_my_tls.sigwait_mask, *set);
> sig_dispatch_pending (true);
>
> - switch (cygwait (NULL, cw_infinite, cw_sig_eintr | cw_cancel |
> cw_cancel_self))
> + switch (cygwait (NULL, cwaittime, cw_sig_eintr | cw_cancel |
> cw_cancel_self))
> {
> case WAIT_SIGNALED:
> if (!sigismember (set, _my_tls.infodata.si_signo))
What I'm missing here is the handling of WAIT_TIMEOUT. In this case,
the default case currently tries to set errno, but no error actually
occured in cygwait, just a timeout. However, WAIT_TIMEOUT should
explicitely set errno to EAGAIN.
Thanks,
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Maintainer cygwin AT cygwin DOT com
Red Hat
signature.asc
Description: PGP signature
