mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-13 14:26:30 -04:00
Refactor event_persist_closure: raise and extract some common logic
This commit is contained in:
parent
d1a03b2ff1
commit
bec22b4176
18
event.c
18
event.c
@ -1258,12 +1258,12 @@ event_persist_closure(struct event_base *base, struct event *ev)
|
|||||||
* ev_io_timeout after the last time it was _scheduled_ for,
|
* ev_io_timeout after the last time it was _scheduled_ for,
|
||||||
* not ev_io_timeout after _now_. If it fired for another
|
* not ev_io_timeout after _now_. If it fired for another
|
||||||
* reason, though, the timeout ought to start ticking _now_. */
|
* reason, though, the timeout ought to start ticking _now_. */
|
||||||
struct timeval run_at;
|
struct timeval run_at, relative_to, delay, now;
|
||||||
|
ev_uint32_t usec_mask = 0;
|
||||||
EVUTIL_ASSERT(is_same_common_timeout(&ev->ev_timeout,
|
EVUTIL_ASSERT(is_same_common_timeout(&ev->ev_timeout,
|
||||||
&ev->ev_io_timeout));
|
&ev->ev_io_timeout));
|
||||||
|
gettime(base, &now);
|
||||||
if (is_common_timeout(&ev->ev_timeout, base)) {
|
if (is_common_timeout(&ev->ev_timeout, base)) {
|
||||||
ev_uint32_t usec_mask;
|
|
||||||
struct timeval delay, relative_to;
|
|
||||||
delay = ev->ev_io_timeout;
|
delay = ev->ev_io_timeout;
|
||||||
usec_mask = delay.tv_usec & ~MICROSECONDS_MASK;
|
usec_mask = delay.tv_usec & ~MICROSECONDS_MASK;
|
||||||
delay.tv_usec &= MICROSECONDS_MASK;
|
delay.tv_usec &= MICROSECONDS_MASK;
|
||||||
@ -1271,20 +1271,18 @@ event_persist_closure(struct event_base *base, struct event *ev)
|
|||||||
relative_to = ev->ev_timeout;
|
relative_to = ev->ev_timeout;
|
||||||
relative_to.tv_usec &= MICROSECONDS_MASK;
|
relative_to.tv_usec &= MICROSECONDS_MASK;
|
||||||
} else {
|
} else {
|
||||||
gettime(base, &relative_to);
|
relative_to = now;
|
||||||
}
|
}
|
||||||
evutil_timeradd(&relative_to, &delay, &run_at);
|
|
||||||
run_at.tv_usec |= usec_mask;
|
|
||||||
} else {
|
} else {
|
||||||
struct timeval relative_to;
|
delay = ev->ev_io_timeout;
|
||||||
if (ev->ev_res & EV_TIMEOUT) {
|
if (ev->ev_res & EV_TIMEOUT) {
|
||||||
relative_to = ev->ev_timeout;
|
relative_to = ev->ev_timeout;
|
||||||
} else {
|
} else {
|
||||||
gettime(base, &relative_to);
|
relative_to = now;
|
||||||
}
|
}
|
||||||
evutil_timeradd(&ev->ev_io_timeout, &relative_to,
|
|
||||||
&run_at);
|
|
||||||
}
|
}
|
||||||
|
evutil_timeradd(&relative_to, &delay, &run_at);
|
||||||
event_add_internal(ev, &run_at, 1);
|
event_add_internal(ev, &run_at, 1);
|
||||||
}
|
}
|
||||||
EVBASE_RELEASE_LOCK(base, th_base_lock);
|
EVBASE_RELEASE_LOCK(base, th_base_lock);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user