X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udevd.c;h=493bb54514ce4fa6ea16bf7b119354c409b6a788;hb=c7969cdbcb1f6d39177f6cc2e28597fabe186594;hp=eb311dfba72e7e5e7ce29b0fd2c9d21c785b819a;hpb=ce39874580829dc97f77b78114874b5086056e5c;p=elogind.git diff --git a/udevd.c b/udevd.c index eb311dfba..493bb5451 100644 --- a/udevd.c +++ b/udevd.c @@ -76,17 +76,14 @@ void log_message(int priority, const char *format, ...) if (priority > udev_log_priority) return; + va_start(args, format); if (verbose) { printf("[%d] ", (int) getpid()); - va_start(args, format); vprintf(format, args); - va_end(args); printf("\n"); - } else { - va_start(args, format); + } else vsyslog(priority, format, args); - va_end(args); - } + va_end(args); } #endif @@ -482,12 +479,20 @@ static int devpath_busy(struct udevd_uevent_msg *msg, int limit) return 3; } + /* check for our major:minor number */ + if (msg->devt && loop_msg->devt == msg->devt && + strcmp(msg->subsystem, loop_msg->subsystem) == 0) { + dbg("%llu, device event still pending %llu (%d:%d)", msg->seqnum, + loop_msg->seqnum, major(loop_msg->devt), minor(loop_msg->devt)); + return 4; + } + /* check physical device event (special case of parent) */ if (msg->physdevpath && msg->action && strcmp(msg->action, "add") == 0) if (compare_devpath(loop_msg->devpath, msg->physdevpath) != 0) { dbg("%llu, physical device event still pending %llu (%s)", msg->seqnum, loop_msg->seqnum, loop_msg->devpath); - return 4; + return 5; } } @@ -510,12 +515,20 @@ static int devpath_busy(struct udevd_uevent_msg *msg, int limit) return 3; } + /* check for our major:minor number */ + if (msg->devt && loop_msg->devt == msg->devt && + strcmp(msg->subsystem, loop_msg->subsystem) == 0) { + dbg("%llu, device event still running %llu (%d:%d)", msg->seqnum, + loop_msg->seqnum, major(loop_msg->devt), minor(loop_msg->devt)); + return 4; + } + /* check physical device event (special case of parent) */ if (msg->physdevpath && msg->action && strcmp(msg->action, "add") == 0) if (compare_devpath(loop_msg->devpath, msg->physdevpath) != 0) { dbg("%llu, physical device event still running %llu (%s)", msg->seqnum, loop_msg->seqnum, loop_msg->devpath); - return 4; + return 5; } } return 0; @@ -849,7 +862,7 @@ static int init_udevd_socket(void) saddr.sun_family = AF_LOCAL; /* use abstract namespace for socket path */ strcpy(&saddr.sun_path[1], UDEVD_CTRL_SOCK_PATH); - addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(saddr.sun_path+1) + 1; + addrlen = offsetof(struct sockaddr_un, sun_path) + 1 + strlen(&saddr.sun_path[1]); udevd_sock = socket(AF_LOCAL, SOCK_DGRAM, 0); if (udevd_sock == -1) {