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 bd21f156146e7bc0162901f11d394a23c3948fad..6e27c8a0d141779edfe2f8e3420c0d4b927a1bdf 100644 (file)
--- a/udevd.c
+++ b/udevd.c
@@ -1,7 +1,7 @@
 /*
  * udevd.c - hotplug event serializer
  *
- * Copyright (C) 2004 Kay Sievers <kay.sievers@vrfy.org>
+ * Copyright (C) 2004-2005 Kay Sievers <kay.sievers@vrfy.org>
  * Copyright (C) 2004 Chris Friesen <chris_friesen@sympatico.ca>
  *
  *
@@ -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"
@@ -67,7 +69,7 @@ static void user_sighandler(void);
 static void reap_sigchilds(void);
 char *udev_bin;
 
-#ifdef LOG
+#ifdef USE_LOG
 void log_message (int level, const char *format, ...)
 {
        va_list args;
@@ -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;