Bug 166258

Summary: RHEL3 fix needed for bugzilla 7510 (pthread signal handling)
Product: Red Hat Enterprise Linux 3 Reporter: Issue Tracker <tao>
Component: kernelAssignee: Don Howard <dhoward>
Status: CLOSED NOTABUG QA Contact: Brian Brock <bbrock>
Severity: medium Docs Contact:
Priority: medium    
Version: 3.0CC: lwang, petrides, tao
Target Milestone: ---   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2005-09-22 07:54:36 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

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.