chiark / gitweb /
udeveventrecorder: add small program that writes an event to disk
[elogind.git] / udevd.c
diff --git a/udevd.c b/udevd.c
index 6fb0bd9433b7e077e71eb44f1d69a8c00f405cb9..f4c986b870813439c0f8e8ce58a6ce34ccf06ea2 100644 (file)
--- a/udevd.c
+++ b/udevd.c
@@ -542,13 +542,15 @@ static struct uevent_msg *get_udevd_msg(void)
        }
 
 switch (usend_msg.type) {
-       case UDEVD_UEVENT:
-               dbg("udevd message (UEVENT) received");
+       case UDEVD_UDEVSEND:
+       case UDEVD_INITSEND:
+               dbg("udevd event message received");
                envbuf_size = size - offsetof(struct udevd_msg, envbuf);
                dbg("envbuf_size=%i", envbuf_size);
                msg = get_msg_from_envbuf(usend_msg.envbuf, envbuf_size);
                if (msg == NULL)
                        return NULL;
+               msg->type = usend_msg.type;
                return msg;
        case UDEVD_STOP_EXEC_QUEUE:
                dbg("udevd message (STOP_EXEC_QUEUE) received");
@@ -566,7 +568,7 @@ switch (usend_msg.type) {
 }
 
 /* receive the kernel user event message and do some sanity checks */
-static struct uevent_msg *get_uevent_msg(void)
+static struct uevent_msg *get_nl_msg(void)
 {
        struct uevent_msg *msg;
        int bufpos;
@@ -591,6 +593,7 @@ static struct uevent_msg *get_uevent_msg(void)
        msg = get_msg_from_envbuf(&buffer[bufpos], size-bufpos);
        if (msg == NULL)
                return NULL;
+       msg->type = UDEVD_NL;
 
        /* validate message */
        pos = strchr(buffer, '@');
@@ -657,7 +660,7 @@ static void udev_done(int pid)
        list_for_each_entry(msg, &running_list, node) {
                if (msg->pid == pid) {
                        sysinfo(&info);
-                       info("seq %llu exit, %ld sec old", msg->seqnum, info.uptime - msg->queue_time);
+                       info("seq %llu exit, %ld seconds old", msg->seqnum, info.uptime - msg->queue_time);
                        run_queue_delete(msg);
 
                        /* we want to run the exec queue manager since there may
@@ -935,7 +938,7 @@ int main(int argc, char *argv[], char *envp[])
                        msg = get_udevd_msg();
                        if (msg) {
                                /* discard kernel messages if netlink is active */
-                               if (uevent_nl_active && msg->seqnum != 0) {
+                               if (uevent_nl_active && msg->type == UDEVD_UDEVSEND && msg->seqnum != 0) {
                                        dbg("skip uevent_helper message, netlink is active");
                                        free(msg);
                                        continue;
@@ -945,12 +948,12 @@ int main(int argc, char *argv[], char *envp[])
                }
 
                if (FD_ISSET(uevent_nl_sock, &workreadfds)) {
-                       msg = get_uevent_msg();
+                       msg = get_nl_msg();
                        if (msg) {
                                msg_queue_insert(msg);
-                               /* disable kernel uevent_helper with first netlink message */
+                               /* disable udevsend with first netlink message */
                                if (!uevent_nl_active) {
-                                       info("uevent_nl message received, disable uevent_helper messages");
+                                       info("uevent_nl message received, disable udevsend messages");
                                        uevent_nl_active = 1;
                                }
                        }