In a comment you say that the mingw replacement for sigaction does not
implement SA_RESTART. We can do better, since the msvcrt library never sets
errno = EINTR anyway: Define SA_RESTART and ignore it.


2008-06-22  Bruno Haible  <[EMAIL PROTECTED]>

        * lib/signal.in.h (SA_RESTART): New macro.
        * lib/sigaction.c: Update comment.

*** lib/signal.in.h.orig        2008-06-22 21:50:37.000000000 +0200
--- lib/signal.in.h     2008-06-22 21:50:26.000000000 +0200
***************
*** 142,147 ****
--- 142,148 ----
  /* Unsupported flags are not present.  */
  # define SA_RESETHAND 1
  # define SA_NODEFER 2
+ # define SA_RESTART 4
  
  extern int sigaction (int, const struct sigaction *restrict,
                        struct sigaction *restrict);
*** lib/sigaction.c.orig        2008-06-22 21:50:37.000000000 +0200
--- lib/sigaction.c     2008-06-22 21:50:26.000000000 +0200
***************
*** 35,45 ****
     the situation by reading static storage in a signal handler, which
     POSIX warns is not generically async-signal-safe.  Oh well.
  
!    Additionally, SIGCHLD is not defined, so we don't implement
!    SA_NOCLDSTOP or SA_NOCLDWAIT; sigaltstack() is not present, so we
!    don't implement SA_ONSTACK; and siginterrupt() is not present, so
!    we don't implement SA_RESTART.  Supporting SA_SIGINFO is impossible
!    to do portably.
  
     POSIX states that an application should not mix signal() and
     sigaction().  We support the use of signal() within the gnulib
--- 35,49 ----
     the situation by reading static storage in a signal handler, which
     POSIX warns is not generically async-signal-safe.  Oh well.
  
!    Additionally:
!      - We don't implement SA_NOCLDSTOP or SA_NOCLDWAIT, because SIGCHLD
!        is not defined.
!      - We don't implement SA_ONSTACK, because sigaltstack() is not present.
!      - We ignore SA_RESTART, because blocking Win32 calls are not interrupted
!        anyway when an asynchronous signal occurs, and the MSVCRT runtime
!        never sets errno to EINTR.
!      - We don't implement SA_SIGINFO because it is impossible to do so
!        portably.
  
     POSIX states that an application should not mix signal() and
     sigaction().  We support the use of signal() within the gnulib



Reply via email to