From 362f8329ccf0f26d3976dfd9d50b70c97117a5f4 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 26 Dec 2001 20:10:32 +0000 Subject: * sysdeps/mach/hurd/sigwait.c (__sigwait): When returning immediately, check only (SS->pending & MASK) for the signal to return. From Jeroen Dekkers . * iconv/skeleton.c [!RESET_INPUT_BUFFER && !SAVE_RESET_STATE]: Use preprocessor #if conditionals instead of `if' to avoid warnings about divide by zero in dead code. --- ChangeLog | 10 ++++++++++ sysdeps/mach/hurd/sigwait.c | 15 ++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 968b321936..67cb599d71 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ +2001-12-26 Roland McGrath + + * sysdeps/mach/hurd/sigwait.c (__sigwait): When returning immediately, + check only (SS->pending & MASK) for the signal to return. + From Jeroen Dekkers . + 2001-12-22 Roland McGrath + * iconv/skeleton.c [!RESET_INPUT_BUFFER && !SAVE_RESET_STATE]: + Use preprocessor #if conditionals instead of `if' to avoid + warnings about divide by zero in dead code. + * hurd/Versions (libc: GLIBC_2.2.5): Add _hurd_port_set, _hurd_port_init, and __hurd_self_sigstate. diff --git a/sysdeps/mach/hurd/sigwait.c b/sysdeps/mach/hurd/sigwait.c index d44a8a30a7..9ddb89980c 100644 --- a/sysdeps/mach/hurd/sigwait.c +++ b/sysdeps/mach/hurd/sigwait.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996,97,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -28,7 +28,7 @@ int __sigwait (const sigset_t *set, int *sig) { struct hurd_sigstate *ss; - sigset_t mask; + sigset_t mask, ready; int signo = 0; struct hurd_signal_preemptor preemptor; jmp_buf buf; @@ -72,20 +72,21 @@ __sigwait (const sigset_t *set, int *sig) ss = _hurd_self_sigstate (); __spin_lock (&ss->lock); - /* See if one of these signals is currently pending */ - if (ss->pending & mask) + /* See if one of these signals is currently pending. */ + ready = ss->pending & mask; + if (ready) { for (signo = 1; signo < NSIG; signo++) - if (__sigismember (&ss->pending, signo)) + if (__sigismember (&ready, signo)) { - __sigdelset (&ss->pending, signo); + __sigdelset (&ready, signo); goto all_done; } /* Huh? Where'd it go? */ abort (); } - /* Wait for one of them to show up */ + /* Wait for one of them to show up. */ if (!setjmp (buf)) { -- cgit 1.4.1