X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=udevsend.c;h=f92ee2b5d8286aa539c575355ee76368b2d43ee6;hb=35b7d88c0dab4c1104c127ddd644db22307949c9;hp=bdc8293df7a2d495d63071469b605240942fdd82;hpb=71c077fb0a9f7222f5363ebc1c67d48d7a2f5ff8;p=elogind.git diff --git a/udevsend.c b/udevsend.c index bdc8293df..f92ee2b5d 100644 --- a/udevsend.c +++ b/udevsend.c @@ -34,6 +34,7 @@ #include #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) {