Merge pull request #843 from poettering/clock-boottime
sd-event: make sure sd_event_now() cannot fail
This commit is contained in:
@@ -797,7 +797,7 @@ int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
|
||||
clock_boottime_or_monotonic(),
|
||||
&time_now);
|
||||
if (r < 0)
|
||||
time_now = now(clock_boottime_or_monotonic());
|
||||
return r;
|
||||
lease->expiration = req->lifetime * USEC_PER_SEC + time_now;
|
||||
|
||||
r = server_send_ack(server, req, address);
|
||||
|
||||
@@ -975,14 +975,9 @@ static int client_start(sd_dhcp6_client *client, enum DHCP6State state)
|
||||
client->retransmit_time = 0;
|
||||
client->retransmit_count = 0;
|
||||
|
||||
if (client->state == DHCP6_STATE_STOPPED) {
|
||||
time_now = now(clock_boottime_or_monotonic());
|
||||
} else {
|
||||
r = sd_event_now(client->event, clock_boottime_or_monotonic(),
|
||||
&time_now);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
switch (state) {
|
||||
case DHCP6_STATE_STOPPED:
|
||||
|
||||
@@ -187,8 +187,7 @@ static void ipv4ll_set_next_wakeup(sd_ipv4ll *ll, int sec, int random_sec) {
|
||||
if (random_sec)
|
||||
next_timeout += random_u32() % (random_sec * USEC_PER_SEC);
|
||||
|
||||
if (sd_event_now(ll->event, clock_boottime_or_monotonic(), &time_now) < 0)
|
||||
time_now = now(clock_boottime_or_monotonic());
|
||||
assert_se(sd_event_now(ll->event, clock_boottime_or_monotonic(), &time_now) >= 0);
|
||||
|
||||
ll->next_wakeup = time_now + next_timeout;
|
||||
ll->next_wakeup_valid = 1;
|
||||
|
||||
@@ -346,9 +346,7 @@ static int pppoe_arm_timeout(sd_pppoe *ppp) {
|
||||
assert(ppp);
|
||||
|
||||
r = sd_event_now(ppp->event, clock_boottime_or_monotonic(), &next_timeout);
|
||||
if (r == -ENODATA)
|
||||
next_timeout = now(clock_boottime_or_monotonic());
|
||||
else if (r < 0)
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
next_timeout += 500 * USEC_PER_MSEC;
|
||||
|
||||
@@ -2572,9 +2572,12 @@ _public_ int sd_event_now(sd_event *e, clockid_t clock, uint64_t *usec) {
|
||||
assert_return(usec, -EINVAL);
|
||||
assert_return(!event_pid_changed(e), -ECHILD);
|
||||
|
||||
/* If we haven't run yet, just get the actual time */
|
||||
if (!dual_timestamp_is_set(&e->timestamp))
|
||||
return -ENODATA;
|
||||
if (!dual_timestamp_is_set(&e->timestamp)) {
|
||||
/* Implicitly fall back to now() if we never ran
|
||||
* before and thus have no cached time. */
|
||||
*usec = now(clock);
|
||||
return 1;
|
||||
}
|
||||
|
||||
switch (clock) {
|
||||
|
||||
|
||||
@@ -372,9 +372,7 @@ void dns_transaction_process_reply(DnsTransaction *t, DnsPacket *p) {
|
||||
}
|
||||
}
|
||||
|
||||
r = sd_event_now(t->scope->manager->event, clock_boottime_or_monotonic(), &ts);
|
||||
if (r < 0)
|
||||
ts = now(clock_boottime_or_monotonic());
|
||||
assert_se(sd_event_now(t->scope->manager->event, clock_boottime_or_monotonic(), &ts) >= 0);
|
||||
|
||||
switch (t->scope->protocol) {
|
||||
case DNS_PROTOCOL_DNS:
|
||||
@@ -602,9 +600,7 @@ int dns_transaction_go(DnsTransaction *t) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = sd_event_now(t->scope->manager->event, clock_boottime_or_monotonic(), &ts);
|
||||
if (r < 0)
|
||||
ts = now(clock_boottime_or_monotonic());
|
||||
assert_se(sd_event_now(t->scope->manager->event, clock_boottime_or_monotonic(), &ts) >= 0);
|
||||
|
||||
t->n_attempts++;
|
||||
t->start_usec = ts;
|
||||
|
||||
+10
-18
@@ -261,7 +261,6 @@ static int on_event_timeout_warning(sd_event_source *s, uint64_t usec, void *use
|
||||
static void worker_attach_event(struct worker *worker, struct event *event) {
|
||||
sd_event *e;
|
||||
uint64_t usec;
|
||||
int r;
|
||||
|
||||
assert(worker);
|
||||
assert(worker->manager);
|
||||
@@ -276,9 +275,7 @@ static void worker_attach_event(struct worker *worker, struct event *event) {
|
||||
|
||||
e = worker->manager->event;
|
||||
|
||||
r = sd_event_now(e, clock_boottime_or_monotonic(), &usec);
|
||||
if (r < 0)
|
||||
return;
|
||||
assert_se(sd_event_now(e, clock_boottime_or_monotonic(), &usec) >= 0);
|
||||
|
||||
(void) sd_event_add_time(e, &event->timeout_warning, clock_boottime_or_monotonic(),
|
||||
usec + arg_event_timeout_warn_usec, USEC_PER_SEC, on_event_timeout_warning, event);
|
||||
@@ -749,9 +746,7 @@ static void manager_exit(Manager *manager) {
|
||||
event_queue_cleanup(manager, EVENT_QUEUED);
|
||||
manager_kill_workers(manager);
|
||||
|
||||
r = sd_event_now(manager->event, clock_boottime_or_monotonic(), &usec);
|
||||
if (r < 0)
|
||||
return;
|
||||
assert_se(sd_event_now(manager->event, clock_boottime_or_monotonic(), &usec) >= 0);
|
||||
|
||||
r = sd_event_add_time(manager->event, NULL, clock_boottime_or_monotonic(),
|
||||
usec + 30 * USEC_PER_SEC, USEC_PER_SEC, on_exit_timeout, manager);
|
||||
@@ -780,7 +775,6 @@ static void manager_reload(Manager *manager) {
|
||||
static void event_queue_start(Manager *manager) {
|
||||
struct udev_list_node *loop;
|
||||
usec_t usec;
|
||||
int r;
|
||||
|
||||
assert(manager);
|
||||
|
||||
@@ -788,17 +782,15 @@ static void event_queue_start(Manager *manager) {
|
||||
manager->exit || manager->stop_exec_queue)
|
||||
return;
|
||||
|
||||
r = sd_event_now(manager->event, clock_boottime_or_monotonic(), &usec);
|
||||
if (r >= 0) {
|
||||
/* check for changed config, every 3 seconds at most */
|
||||
if (manager->last_usec == 0 ||
|
||||
(usec - manager->last_usec) > 3 * USEC_PER_SEC) {
|
||||
if (udev_rules_check_timestamp(manager->rules) ||
|
||||
udev_builtin_validate(manager->udev))
|
||||
manager_reload(manager);
|
||||
assert_se(sd_event_now(manager->event, clock_boottime_or_monotonic(), &usec) >= 0);
|
||||
/* check for changed config, every 3 seconds at most */
|
||||
if (manager->last_usec == 0 ||
|
||||
(usec - manager->last_usec) > 3 * USEC_PER_SEC) {
|
||||
if (udev_rules_check_timestamp(manager->rules) ||
|
||||
udev_builtin_validate(manager->udev))
|
||||
manager_reload(manager);
|
||||
|
||||
manager->last_usec = usec;
|
||||
}
|
||||
manager->last_usec = usec;
|
||||
}
|
||||
|
||||
udev_builtin_init(manager->udev);
|
||||
|
||||
Reference in New Issue
Block a user