chiark / gitweb /
[PATCH] fix bad typo that prevents the GROUP to be applied
[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 <sys/wait.h>
 #include <signal.h>
 #include <unistd.h>
 #include <errno.h>
@@ -31,6 +30,8 @@
 #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>
@@ -112,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)
@@ -292,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;
@@ -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, "TIMEOUT=", 8) == 0)
+                       msg->timeout = strtoull(&key[8], NULL, 10);
        }
        msg->envp[i++] = "UDEVD_EVENT=1";
        msg->envp[i] = NULL;