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 c2f2dd048b57a8e919628fb7d33d2f6c0583ee64..6e27c8a0d141779edfe2f8e3420c0d4b927a1bdf 100644
(file)
--- a/
udevd.c
+++ b/
udevd.c
@@
-21,7
+21,6
@@
*/
#include <stddef.h>
*/
#include <stddef.h>
-#include <sys/wait.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>
@@
-31,6
+30,8
@@
#include <ctype.h>
#include <dirent.h>
#include <fcntl.h>
#include <ctype.h>
#include <dirent.h>
#include <fcntl.h>
+#include <sys/select.h>
+#include <sys/wait.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>
@@
-112,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)
@@
-292,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;
@@
-489,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;