X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udevd.c;h=d6977e9655de8442195c8ba98b9c728c3c452abc;hb=41dd741442ab496901c38f6cd38404bd954f1857;hp=66a410ec778b24100ca83b81893a550cb9041106;hpb=c70560feef0eb61a150cd2f956f0beead4313ffe;p=elogind.git diff --git a/udevd.c b/udevd.c index 66a410ec7..d6977e965 100644 --- a/udevd.c +++ b/udevd.c @@ -115,7 +115,7 @@ static int udev_event_process(struct udevd_uevent_msg *msg) sigaction(SIGHUP, &act, NULL); /* trigger timeout to prevent hanging processes */ - alarm(UDEV_ALARM_TIMEOUT); + alarm(UDEV_EVENT_TIMEOUT); /* reconstruct event environment from message */ for (i = 0; msg->envp[i]; i++) @@ -131,6 +131,10 @@ static int udev_event_process(struct udevd_uevent_msg *msg) retval = udev_device_event(&rules, udev); + /* rules may change/disable the timeout */ + if (udev->event_timeout >= 0) + alarm(udev->event_timeout); + /* run programs collected by RUN-key*/ if (retval == 0 && !udev->ignore_device && udev_run) retval = udev_rules_run(udev); @@ -265,6 +269,9 @@ static void msg_queue_insert(struct udevd_uevent_msg *msg) msg->queue_time = time(NULL); + export_event_state(msg, EVENT_QUEUED); + info("seq %llu queued, '%s' '%s'\n", msg->seqnum, msg->action, msg->subsystem); + strlcpy(filename, udev_root, sizeof(filename)); strlcat(filename, "/" EVENT_SEQNUM, sizeof(filename)); fd = open(filename, O_WRONLY|O_TRUNC|O_CREAT, 0644); @@ -277,9 +284,6 @@ static void msg_queue_insert(struct udevd_uevent_msg *msg) close(fd); } - export_event_state(msg, EVENT_QUEUED); - info("seq %llu queued, '%s' '%s'\n", msg->seqnum, msg->action, msg->subsystem); - /* run one event after the other in debug mode */ if (debug_trace) { list_add_tail(&msg->node, &running_list);