Bug 166258 - RHEL3 fix needed for bugzilla 7510 (pthread signal handling)
Summary: RHEL3 fix needed for bugzilla 7510 (pthread signal handling)
Keywords:
Status: CLOSED NOTABUG
Alias: None
Product: Red Hat Enterprise Linux 3
Classification: Red Hat
Component: kernel
Version: 3.0
Hardware: x86_64
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Don Howard
QA Contact: Brian Brock
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2005-08-18 12:29 UTC by Issue Tracker
Modified: 2007-11-30 22:07 UTC (History)
3 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2005-09-22 07:54:36 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)

Description Issue Tracker 2005-08-18 12:29:26 UTC
Escalated to Bugzilla from IssueTracker

Comment 10 Don Howard 2005-09-22 00:55:33 UTC
I have tracked down the SIGCHLD issue.  RHEL3 short-circuits signal delivery for
signals who's default is SIG_IGN. 

__group_send_sig_info() 
...
	if (sig_kernel_ignore(sig) &&
			p->sighand->action[sig-1].sa.sa_handler == SIG_DFL) {
		rm_from_queue(sigmask(sig), &p->signal->shared_pending);
		return 0;
	}
...


By adding a no-op signal handler for SIGCHLD, I was able to get the expected 
behavior on RHEL3 & 4.  I'll investigate the possiblity of modifying RHEL3 to
behave like RHEL4, but the RHEL3 behaviour is arguably correct.  



Comment 12 Don Howard 2005-09-22 07:48:58 UTC
Further digging (and close reading of 'man sigwait') points this out:


       sigwait suspends the calling thread until one of the signals in set is
       delivered to the calling thread. It then stores the number of the sig-
       nal received in the location pointed to by sig and returns. The signals
       in  set must be **blocked and not ignored on entrance to sigwait.**  If 
      
       the delivered signal has a signal handler function attached, that  
       function is not called.


The customer's test program does not install any sort of signal handler for
SIGCHLD.  The default disposition of SIGCHLD is SIG_IGN, so the signal is
implicitly ignored.




Note You need to log in before you can comment on or make changes to this bug.