diff options
| author | Stephen Hanson <Stephen.Hanson@Sun.COM> | 2009-08-24 13:00:47 -0700 |
|---|---|---|
| committer | Stephen Hanson <Stephen.Hanson@Sun.COM> | 2009-08-24 13:00:47 -0700 |
| commit | 5ad1f010a7b934be6e0dd6c13198af62791824be (patch) | |
| tree | 42e3cf36d3c12ea2791cf9d6a5ffed9dfaac727c /usr/src/cmd/syseventd/modules | |
| parent | 2f349fb3f7f2c951525d92f15ef050d897ec3244 (diff) | |
| download | illumos-joyent-5ad1f010a7b934be6e0dd6c13198af62791824be.tar.gz | |
6853894 syseventd is core dumping on snv_117
6860272 syseventd: [daemon.error] Fatal:attempting to dump core
4902139 syseventd lies about dumping core
6522182 syseventd doesn't work with both the options -r and -d
Diffstat (limited to 'usr/src/cmd/syseventd/modules')
| -rw-r--r-- | usr/src/cmd/syseventd/modules/datalink_mod/datalink_mod.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/usr/src/cmd/syseventd/modules/datalink_mod/datalink_mod.c b/usr/src/cmd/syseventd/modules/datalink_mod/datalink_mod.c index 3a0fcb8af4..72b8a5b7ce 100644 --- a/usr/src/cmd/syseventd/modules/datalink_mod/datalink_mod.c +++ b/usr/src/cmd/syseventd/modules/datalink_mod/datalink_mod.c @@ -36,6 +36,7 @@ #include <libnvpair.h> #include <librcm.h> #include <libsysevent.h> +#include "sysevent_signal.h" extern void syseventd_err_print(char *, ...); @@ -71,15 +72,26 @@ datalink_notify_thread(void *arg) (void) mutex_unlock(&dl_mx); while (tmp_events != NULL) { + struct sigaction cbuf, dfl; + + /* + * Ignore SIGCLD for the + * duration of the rcm_notify_event call. + */ + (void) memset(&dfl, 0, sizeof (dfl)); + dfl.sa_handler = SIG_IGN; + (void) sigaction(SIGCHLD, &dfl, &cbuf); + /* * Send the PHYSLINK_NEW event to network_rcm to update * the network devices cache accordingly. */ if (rcm_notify_event(rcm_hdl, RCM_RESOURCE_PHYSLINK_NEW, 0, tmp_events->ev, NULL) != RCM_SUCCESS) - syseventd_err_print("datalink_mod: Can not" + syseventd_err_print("datalink_mod: Can not " "notify event: %s\n", strerror(errno)); + (void) sigaction(SIGCHLD, &cbuf, NULL); ep = tmp_events; tmp_events = tmp_events->next; nvlist_free(ep->ev); |
