summaryrefslogtreecommitdiff
path: root/udevd.c
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2005-03-17 11:51:37 +0100
committerGreg KH <gregkh@suse.de>2005-04-26 23:53:53 -0700
commit7f7ae03a6290ccc1e4ca57416fe871dae4b865d2 (patch)
tree56344826c4755306994bfb7754daf81b5237b02e /udevd.c
parent92ebb398ed004348d5f92a242f323fb25dc7d6e5 (diff)
[PATCH] udevd: don't delay events with TIMEOUT in the environment
On Tue, 2005-03-15 at 09:25 +0100, Hannes Reinecke wrote: > The current implementation of the firmware class breaks a fundamental > assumption in udevd: that the physical device can be initialised fully > prior to executing the next event for that device. Thanks to Hannes for the patch.
Diffstat (limited to 'udevd.c')
-rw-r--r--udevd.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/udevd.c b/udevd.c
index 2cd3622ce0..6e27c8a0d1 100644
--- a/udevd.c
+++ b/udevd.c
@@ -113,6 +113,14 @@ static void msg_queue_insert(struct hotplug_msg *msg)
return;
}
+ /* don't delay messages with timeout set */
+ if (msg->timeout) {
+ dbg("move seq %llu with timeout %u to exec queue", msg->seqnum, msg->timeout);
+ list_add(&msg->node, &exec_list);
+ run_exec_q = 1;
+ return;
+ }
+
/* sort message by sequence number into list */
list_for_each_entry_reverse(loop_msg, &msg_list, node) {
if (loop_msg->seqnum < msg->seqnum)
@@ -293,6 +301,10 @@ static struct hotplug_msg *running_with_devpath(struct hotplug_msg *msg)
if (msg->devpath == NULL)
return NULL;
+ /* skip any events with a timeout set */
+ if (msg->timeout)
+ return NULL;
+
list_for_each_entry(loop_msg, &running_list, node) {
if (loop_msg->devpath == NULL)
continue;
@@ -490,6 +502,9 @@ static struct hotplug_msg *get_udevsend_msg(void)
if (strncmp(key, "PHYSDEVPATH=", 12) == 0)
msg->physdevpath = &key[12];
+
+ if (strncmp(key, "TIMEOUT=", 8) == 0)
+ msg->timeout = strtoull(&key[8], NULL, 10);
}
msg->envp[i++] = "UDEVD_EVENT=1";
msg->envp[i] = NULL;