Bug 166258 - RHEL3 fix needed for bugzilla 7510 (pthread signal handling)
RHEL3 fix needed for bugzilla 7510 (pthread signal handling)
Product: Red Hat Enterprise Linux 3
Classification: Red Hat
Component: kernel (Show other bugs)
x86_64 Linux
medium Severity medium
: ---
: ---
Assigned To: Don Howard
Brian Brock
Depends On:
  Show dependency treegraph
Reported: 2005-08-18 08:29 EDT by Issue Tracker
Modified: 2007-11-30 17:07 EST (History)
3 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Last Closed: 2005-09-22 03:54:36 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)

  None (edit)
Description Issue Tracker 2005-08-18 08:29:26 EDT
Escalated to Bugzilla from IssueTracker
Comment 10 Don Howard 2005-09-21 20:55:33 EDT
I have tracked down the SIGCHLD issue.  RHEL3 short-circuits signal delivery for
signals who's default is SIG_IGN. 

	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 03:48:58 EDT
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.