chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] udevd: don't delay events with TIMEOUT in the environment
[elogind.git]
/
udevd.c
diff --git
a/udevd.c
b/udevd.c
index 2cd3622ce011a5a04630ff8d05595dbd6d53fc81..6e27c8a0d141779edfe2f8e3420c0d4b927a1bdf 100644
(file)
--- a/
udevd.c
+++ b/
udevd.c
@@
-113,6
+113,14
@@
static void msg_queue_insert(struct hotplug_msg *msg)
return;
}
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)
/* 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;
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;
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, "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;
}
msg->envp[i++] = "UDEVD_EVENT=1";
msg->envp[i] = NULL;