summaryrefslogtreecommitdiff
path: root/usr/src/cmd/syseventd/modules
diff options
context:
space:
mode:
authorStephen Hanson <Stephen.Hanson@Sun.COM>2009-08-24 13:00:47 -0700
committerStephen Hanson <Stephen.Hanson@Sun.COM>2009-08-24 13:00:47 -0700
commit5ad1f010a7b934be6e0dd6c13198af62791824be (patch)
tree42e3cf36d3c12ea2791cf9d6a5ffed9dfaac727c /usr/src/cmd/syseventd/modules
parent2f349fb3f7f2c951525d92f15ef050d897ec3244 (diff)
downloadillumos-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.c14
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);