chiark / gitweb /
[PATCH] udevd - next round of fixes
[elogind.git] / udevsend.c
index bdc8293..f92ee2b 100644 (file)
@@ -34,6 +34,7 @@
 #include <wait.h>
 
 #include "udev.h"
+#include "udev_version.h"
 #include "udevd.h"
 #include "logging.h"
 
@@ -64,6 +65,7 @@ static inline char *get_seqnum(void)
 static int build_hotplugmsg(struct hotplug_msg *msg, char *action,
                            char *devpath, char *subsystem, int seqnum)
 {
+       memset(msg, 0x00, sizeof(*msg));
        msg->mtype = HOTPLUGMSGTYPE;
        msg->seqnum = seqnum;
        strncpy(msg->action, action, 8);
@@ -85,7 +87,9 @@ static int start_daemon(void)
                switch (child_pid) {
                case 0:
                        /* daemon */
-                       execl(DEFAULT_UDEVD_EXEC, NULL);
+                       setsid();
+                       chdir("/");
+                       execl(UDEVD_BIN, "udevd", NULL);
                        dbg("exec of daemon failed");
                        exit(1);
                case -1:
@@ -99,7 +103,7 @@ static int start_daemon(void)
                dbg("fork of helper failed");
                return -1;
        default:
-               wait(0);
+               wait(NULL);
        }
        return 0;
 }
@@ -147,7 +151,8 @@ int main(int argc, char* argv[])
        seq = atoi(seqnum);
 
        /* create ipc message queue or get id of our existing one */
-       key = ftok(DEFAULT_UDEVD_EXEC, IPC_KEY_ID);
+       key = ftok(UDEVD_BIN, IPC_KEY_ID);
+       dbg("using ipc queue 0x%0x", key);
        size =  build_hotplugmsg(&message, action, devpath, subsystem, seq);
        msgid = msgget(key, IPC_CREAT);
        if (msgid == -1) {
@@ -165,7 +170,7 @@ int main(int argc, char* argv[])
        /* get state of ipc queue */
        tspec.tv_sec = 0;
        tspec.tv_nsec = 10000000;  /* 10 millisec */
-       loop = 20;
+       loop = UDEVSEND_RETRY_COUNT;
        while (loop--) {
                retval = msgctl(msgid, IPC_STAT, &msg_queue);
                if (retval == -1) {