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 1376cf05c777a4a331f13c0d758deff240d895de..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>
@@ -39,6 +40,7 @@
 #include <sys/stat.h>
 
 #include "list.h"
+#include "udev_libc_wrapper.h"
 #include "udev.h"
 #include "udev_version.h"
 #include "udev_utils.h"
@@ -111,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)
@@ -262,7 +272,7 @@ static int compare_devpath(const char *running, const char *waiting)
 {
        int i;
 
-       for (i = 0; i < DEVPATH_SIZE; i++) {
+       for (i = 0; i < PATH_SIZE; i++) {
                /* identical device event found */
                if (running[i] == '\0' && waiting[i] == '\0')
                        return 1;
@@ -291,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;
@@ -488,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;