This is the mail archive of the cygwin-patches@cygwin.com mailing list for the Cygwin project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
At 08:43 PM 3/11/2004 -0500, you wrote:
>On Thu, Mar 11, 2004 at 07:36:41PM -0500, Pierre A. Humblet wrote:
>>There was a problem: pause() calls handle_sigsuspend(), which overwrites
>>the oldmask set by _cygtls::interrupt_setup. It's all fixed, and I have
>>renamed newmask to deltamask in cygtls.h. I can send you a fresh patch
>>(everything, against cvs) now, or wait until you apply yours.
>
>Go ahead and send the patch.
>
>Btw, I removed the setting of oldmask in _cygtls::fixup_after_fork after
>I searched for oldmask last night after seeing your patch.
OK, I had set oldmask again just for the fixup. I have just deleted
that line without retesting.
>>BTW I noticed that Posix and Cygwin diverge on sigpause.
>>
>>Posix:
>>int sigpause(int sig);
>>The sigpause() function removes sig from the calling process' signal
>>mask and suspends the calling process until a signal is received. The
>>sigpause() function restores the process' signal mask to its original
>>state before returning.
>>
>>Cygwin
>>sigpause (int signal_mask)
>>{
>> return handle_sigsuspend ((sigset_t) signal_mask);
>>}
>
>Sorry, but I don't see any divergence. A reading of the above might
>seem to indicate that sigpause should return on the receipt of any
>signal but I notice that on linux (and one other UNIX that I tested this
>on) sigpause only returns on the receipt of a signal that has a handler
>associated with it. This makes sigpause equivalent to sigsuspend,
>AFAICT.
What I find strange is that usually sig is an integer (1-32), not a mask.
Compare the two following lines are from the same Posix page
void (*sigset(int sig, void (*disp)(int)))(int); <= clearly an integer
int sigpause(int sig); <= a mask???
2004-02-11 Pierre Humblet <pierre.humblet@ieee.org>
* cygtls.h (_cygtls::newmask): Delete member.
(_cygtls::newmask): New member.
* gendef (_sigdelayed): Replace the call to
set_process_mask by a call to set_process_mask_delta.
* exceptions.cc (handle_sigsuspend): Do not filter tempmask.
Or SIG_NONMASKABLE in deltamask as a flag.
(_cygtls::interrupt_setup): Set deltamask only.
(set_process_mask_delta): New function.
(_cygtls::call_signal_handler): Replace the first call to
set_process_mask by a call to set_process_mask_delta.
Attachment:
signal.diff
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |