diff -up cygwin-1.5.24-2.orig/winsup/cygwin/signal.cc cygwin-1.5.24-2/winsup/cygwin/signal.cc --- cygwin-1.5.24-2.orig/winsup/cygwin/signal.cc 2006-07-05 01:57:43.001000000 +0200 +++ cygwin-1.5.24-2/winsup/cygwin/signal.cc 2007-03-07 19:23:27.593750000 +0100 @@ -153,7 +153,6 @@ sigprocmask (int how, const sigset_t *se int __stdcall handle_sigprocmask (int how, const sigset_t *set, sigset_t *oldset, sigset_t& opmask) { - sig_dispatch_pending (); /* check that how is in right range */ if (how != SIG_BLOCK && how != SIG_UNBLOCK && how != SIG_SETMASK) { @@ -171,7 +170,8 @@ handle_sigprocmask (int how, const sigse if (set) { - sigset_t newmask = opmask; + sigset_t oldmask = opmask; + sigset_t newmask = oldmask; switch (how) { case SIG_BLOCK: @@ -187,7 +187,11 @@ handle_sigprocmask (int how, const sigse newmask = *set; break; } - set_signal_mask (newmask, opmask); + if (oldmask != newmask) + { + sig_dispatch_pending(); + set_signal_mask (newmask, opmask); + } } return 0; }