2011/7/3 Jeremie Koenig <j...@jk.fr.eu.org>:
> On Sun, Jul 03, 2011 at 12:34:22AM +0200, Samuel Thibault wrote:
>> There is just one change that would be worth mentioning in the changelog:
>>
>> > -                 /* We "deliver" immediately pending blocked signals whose
>> > -                    action might be to ignore, so that if ignored they are
>> > -                    dropped right away.  */
>> > -                 || ss->actions[signo].sa_handler == SIG_IGN
>> > -                 || ss->actions[signo].sa_handler == SIG_DFL))
>>
>> This is not done any more.  Actually I believe it is more correct.
>
> Note that this example still does not terminate after the patch, because
> ignored signals are never actually marked pending:
>
> (hurd/hurdsig.c)
> |   if (act != ignore &&          /* Signals ignored now are forgotten now.  
> */

Dropped by the attached patch.

-- 
Jérémie Koenig <j...@jk.fr.eu.org>
http://jk.fr.eu.org/
commit 8e87205e2f8bd8ce8fca2eba75f7695394351f24
Author: Jeremie Koenig <j...@jk.fr.eu.org>
Date:   Wed Jul 20 02:23:13 2011 +0000

    Hurd signals: don't drop blocked ignored signals
    
    Although POSIX tolerates the current approach, it is more consistent
    to wait for ignored signals to be unblocked before we deliver them.
    
    	* hurd/hurdsig.c (post_signal): Don't drop blocked ignored signals.

diff --git a/hurd/hurdsig.c b/hurd/hurdsig.c
index 67037e8..44e067c 100644
--- a/hurd/hurdsig.c
+++ b/hurd/hurdsig.c
@@ -859,9 +859,7 @@ post_signal (struct hurd_sigstate *ss,
     }
 
   /* Handle receipt of a blocked signal, or any signal while stopped.  */
-  if (act != ignore &&		/* Signals ignored now are forgotten now.  */
-      __sigismember (&blocked, signo) ||
-      (signo != SIGKILL && _hurd_stopped))
+  if (__sigismember (&blocked, signo) || (signo != SIGKILL && _hurd_stopped))
     {
       mark_pending ();
       act = ignore;

Reply via email to