Subject: Re: Sergey's latest cygwin.dll and pdksh
From: [email-masked] (Chris Faylor)

16 Jun 1997 17:04:22 -0700
Sender: [email-masked]
Approved: [email-masked]
Distribution: cygnus
Message-ID: <[email-masked]>
References: <[email-masked]>
Reply-To: [email-masked]
X-Newsreader: trn 4.0-test57 (27 Apr 97)
Original-To: [email-masked]
X-Mailer: Perl5 Mail::Internet v1.28
Original-Sender: [email-masked]

In article <[email-masked]>,
Sergey Okhapkin  <[email-masked]> wrote:
>Chris Faylor wrote:
>> >It's easy for me to fix this bug, if anyone will answer my question -
>> >should sigsuspend() (and the others blocking calls) terminate when
>> >receiving blocked or uncatched signal?
>>
>> Sergey,
>> If I run the code below on a variety of UNIX systems and tell you how it
>> works, will that answer your question?
>>
>> #include <signal.h>
>> main()
>> {
>>     sigset_t nada = 0L;
>>     if (fork() == 0) {
>> 	sleep(2);
>> 	exit(0);
>>     }
>>
>>     sigsuspend(&nada);
>>     puts("returned");
>>     exit(0);
>> }
>>
>> FYI, I ran this on one system here (Digital UNIX 3.2C) and it blocked
>> forever.  If this isn't quite right, then, if it is possible, could you
>> modify this (or throw it away and start from scratch) to show the answer
>> to your question?
>
>I've tried something like it on linux with the same result - blocked, 
>ignored or uncatched signals with ignore as a default disposition, does not 
>terminates wait calls. So, I have no ideas now why zsh's SIGCHLD behavior  
> differs on unixes and on cygwin...

Just so we're on the same wavelength, this is the relevant code from zsh:

----

#ifdef POSIX_SIGNALS
    struct sigaction act;

    act.sa_handler = (SIGNAL_HANDTYPE) handler;
    sigemptyset(&act.sa_mask);        /* only block sig while in handler */
    act.sa_flags = 0;
# ifdef SA_INTERRUPT                  /* SunOS 4.x */
    if (interact)
        act.sa_flags |= SA_INTERRUPT; /* make sure system calls are not restarte
d */
# endif
    sigaction(sig, &act, (struct sigaction *)NULL);

----

Where the 'sig' is 'SIGCHLD'.

It appears that 'sig' is blocked while within the handler.  Could that be
what is going wrong?
-- 
http://www.bbc.com/	[email-masked]			"Strange how unreal
VMS=>UNIX Solutions	Boston Business Computing	 the real can be."
-
For help on using this list (especially unsubscribing), send a message to
"[email-masked]" with one line of text: "help".