chiark / gitweb /
move SEQNUM event skipping to udevsend
[elogind.git] / udevd.c
diff --git a/udevd.c b/udevd.c
index e1afb7622b115fe1519a9f5ae42481fde525532c..b87fe564134df50afb59509c19d77454ede56ca8 100644 (file)
--- a/udevd.c
+++ b/udevd.c
@@ -176,6 +176,7 @@ static void export_event_state(struct uevent_msg *msg, enum event_state state)
        switch (state) {
        case EVENT_QUEUED:
                unlink(filename_failed);
+               delete_path(filename_failed);
 
                strlcpy(target, sysfs_path, sizeof(target));
                strlcat(target, msg->devpath, sizeof(target));
@@ -183,16 +184,26 @@ static void export_event_state(struct uevent_msg *msg, enum event_state state)
                symlink(target, filename);
                return;
        case EVENT_FINISHED:
+       case EVENT_FAILED:
                unlink(filename_failed);
+               delete_path(filename_failed);
 
-               /* don't remove if events for the same path are still pending */
+               /* don't remove, if events for the same path are still pending */
                list_for_each_entry(loop_msg, &running_list, node)
                        if (loop_msg->devpath && strcmp(loop_msg->devpath, msg->devpath) == 0)
                                return;
-               unlink(filename);
-       case EVENT_FAILED:
-               create_path(filename_failed);
-               rename(filename, filename_failed);
+
+               /* move failed events to the failed directory */
+               if (state == EVENT_FAILED) {
+                       create_path(filename_failed);
+                       rename(filename, filename_failed);
+               } else {
+                       unlink(filename);
+               }
+
+               /* clean up the queue directory */
+               delete_path(filename);
+
                return;
        }
 }
@@ -705,6 +716,8 @@ static void reap_sigchilds(void)
                        break;
                if (WIFEXITED(status))
                        status = WEXITSTATUS(status);
+               else if (WIFSIGNALED(status))
+                       status = WTERMSIG(status) + 128;
                else
                        status = 0;
                udev_done(pid, status);
@@ -966,13 +979,8 @@ int main(int argc, char *argv[], char *envp[])
                /* get user socket message */
                if (FD_ISSET(udevd_sock, &readfds)) {
                        msg = get_udevd_msg();
-                       if (msg) {
-                               if (msg->type == UDEVD_UEVENT_UDEVSEND && msg->seqnum != 0) {
-                                       info("skip non-kernel message with SEQNUM");
-                                       free(msg);
-                               } else
-                                       msg_queue_insert(msg);
-                       }
+                       if (msg)
+                               msg_queue_insert(msg);
                }
 
                /* get kernel netlink message */