[Linux-ia64] Re: Bug: Blocking of RT signals in a pause()

From: Keith Owens <kaos_at_sgi.com>
Date: 2003-02-25 10:15:50
On Fri, 21 Feb 2003 17:38:24 +0100, 
Eric Piel <Eric.Piel@Bull.Net> wrote:
>Basically the problem is that while my program is in a pause() I can not
>receive any signal > 32 (RT signals) even if I've just unblocked them.
>In addition if I unblock signal 32 then all the RT signals are
>unblocked. This strange behaviour is not reproductible during a sleep().
>No idea came to my mind to test other system calls so I can't say more.

It looks like this has been fixed in glibc CVS 2003-02-23.  The old
pause file (sysdeps/unix/common/pause.c) has been deleted and
sysdeps/posix/pause.c has been added, containing:

#include <signal.h>
#include <unistd.h>

/* Suspend the process until a signal arrives.
   This always returns -1 and sets errno to EINTR.  */
int
__libc_pause (void)
{
  sigset_t set;

  __sigemptyset (&set);
  __sigprocmask (SIG_BLOCK, NULL, &set);

  /* pause is a cancellation point, but so is sigsuspend.
     So no need for anything special here.  */

  return __sigsuspend (&set);
}
weak_alias (__libc_pause, pause)

Either upgrade ia64 to glibc from CVS or modify your existing glibc to
use the above code for pause.
Received on Mon Feb 24 15:16:35 2003

This archive was generated by hypermail 2.1.8 : 2005-08-02 09:20:12 EST