X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev%2Fudevadm-settle.c;h=4f422f90927d410b3287721245fed26444435840;hp=0b3f2e21246d7b3a5e6edd5a810b571fec716792;hb=0ec5b5e1429307fa7573aaa9b8f25fbd9b1d71d5;hpb=97f48a8c67520bf1a58f1516ea3f5953ef399a96 diff --git a/udev/udevadm-settle.c b/udev/udevadm-settle.c index 0b3f2e212..4f422f909 100644 --- a/udev/udevadm-settle.c +++ b/udev/udevadm-settle.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Kay Sievers + * Copyright (C) 2006-2009 Kay Sievers * Copyright (C) 2009 Canonical Ltd. * Copyright (C) 2009 Scott James Remnant * @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -65,6 +66,7 @@ int udevadm_settle(struct udev *udev, int argc, char *argv[]) const char *exists = NULL; int timeout = DEFAULT_TIMEOUT; struct sigaction act; + sigset_t mask; struct udev_queue *udev_queue = NULL; int rc = 1; @@ -77,6 +79,10 @@ int udevadm_settle(struct udev *udev, int argc, char *argv[]) act.sa_flags = 0; sigaction(SIGALRM, &act, NULL); sigaction(SIGUSR1, &act, NULL); + sigemptyset(&mask); + sigaddset(&mask, SIGUSR1); + sigaddset(&mask, SIGALRM); + sigprocmask(SIG_UNBLOCK, &mask, NULL); while (1) { int option; @@ -139,14 +145,12 @@ int udevadm_settle(struct udev *udev, int argc, char *argv[]) if (start > end) { err(udev, "seq-start larger than seq-end, ignoring\n"); - fprintf(stderr, "seq-start larger than seq-end, ignoring\n"); start = 0; end = 0; } if (start > kernel_seq || end > kernel_seq) { err(udev, "seq-start or seq-end larger than current kernel value, ignoring\n"); - fprintf(stderr, "seq-start or seq-end larger than current kernel value, ignoring\n"); start = 0; end = 0; } @@ -154,7 +158,6 @@ int udevadm_settle(struct udev *udev, int argc, char *argv[]) } else { if (end > 0) { err(udev, "seq-end needs seq-start parameter, ignoring\n"); - fprintf(stderr, "seq-end needs seq-start parameter, ignoring\n"); end = 0; } } @@ -165,7 +168,7 @@ int udevadm_settle(struct udev *udev, int argc, char *argv[]) uctrl = udev_ctrl_new_from_socket(udev, UDEV_CTRL_SOCK_PATH); if (uctrl != NULL) { - sigset_t mask, oldmask; + sigset_t oldmask; sigemptyset(&mask); sigaddset(&mask, SIGUSR1); @@ -180,6 +183,7 @@ int udevadm_settle(struct udev *udev, int argc, char *argv[]) while (1) { struct stat statbuf; + const struct timespec duration = { 0 , 1000 * 1000 * 1000 / LOOP_PER_SECOND }; if (exists != NULL && stat(exists, &statbuf) == 0) { rc = 0; @@ -203,7 +207,7 @@ int udevadm_settle(struct udev *udev, int argc, char *argv[]) if (is_timeout) break; - usleep(1000 * 1000 / LOOP_PER_SECOND); + nanosleep(&duration, NULL); } /* if we reached the timeout, print the list of remaining events */