Bug 166258
| Summary: | RHEL3 fix needed for bugzilla 7510 (pthread signal handling) | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 3 | Reporter: | Issue Tracker <tao> |
| Component: | kernel | Assignee: | Don Howard <dhoward> |
| Status: | CLOSED NOTABUG | QA Contact: | Brian Brock <bbrock> |
| Severity: | medium | Docs Contact: | |
| Priority: | medium | ||
| Version: | 3.0 | CC: | 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: | --- | Target Upstream Version: | |
| Embargoed: | |||
|
Description
Issue Tracker
2005-08-18 12:29:26 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.
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.
|