chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
unblock signals we might want to handle
[elogind.git]
/
udev
/
udevadm-settle.c
diff --git
a/udev/udevadm-settle.c
b/udev/udevadm-settle.c
index 0b3f2e21246d7b3a5e6edd5a810b571fec716792..4f422f90927d410b3287721245fed26444435840 100644
(file)
--- a/
udev/udevadm-settle.c
+++ b/
udev/udevadm-settle.c
@@
-1,5
+1,5
@@
/*
/*
- * Copyright (C) 2006-200
8
Kay Sievers <kay@vrfy.org>
+ * Copyright (C) 2006-200
9
Kay Sievers <kay@vrfy.org>
* Copyright (C) 2009 Canonical Ltd.
* Copyright (C) 2009 Scott James Remnant <scott@netsplit.com>
*
* Copyright (C) 2009 Canonical Ltd.
* Copyright (C) 2009 Scott James Remnant <scott@netsplit.com>
*
@@
-28,6
+28,7
@@
#include <syslog.h>
#include <getopt.h>
#include <signal.h>
#include <syslog.h>
#include <getopt.h>
#include <signal.h>
+#include <time.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/types.h>
@@
-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;
const char *exists = NULL;
int timeout = DEFAULT_TIMEOUT;
struct sigaction act;
+ sigset_t mask;
struct udev_queue *udev_queue = NULL;
int rc = 1;
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);
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;
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");
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");
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;
}
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");
} 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;
}
}
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) {
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);
sigemptyset(&mask);
sigaddset(&mask, SIGUSR1);
@@
-180,6
+183,7
@@
int udevadm_settle(struct udev *udev, int argc, char *argv[])
while (1) {
struct stat statbuf;
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;
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;
if (is_timeout)
break;
-
usleep(1000 * 1000 / LOOP_PER_SECOND
);
+
nanosleep(&duration, NULL
);
}
/* if we reached the timeout, print the list of remaining events */
}
/* if we reached the timeout, print the list of remaining events */