version 1.1, 2013/10/14 10:32:47
|
version 1.1.1.3, 2016/11/02 10:35:00
|
Line 1
|
Line 1
|
|
#include "first.h" |
|
|
#include "fdevent.h" |
#include "fdevent.h" |
#include "buffer.h" |
#include "buffer.h" |
#include "log.h" |
#include "log.h" |
Line 67 static int fdevent_libev_event_set(fdevents *ev, int f
|
Line 69 static int fdevent_libev_event_set(fdevents *ev, int f
|
|
|
if (!watcher) { |
if (!watcher) { |
fdn->handler_ctx = watcher = calloc(1, sizeof(ev_io)); |
fdn->handler_ctx = watcher = calloc(1, sizeof(ev_io)); |
assert(watcher); | force_assert(watcher); |
|
|
ev_io_init(watcher, io_watcher_cb, fd, ev_events); |
ev_io_init(watcher, io_watcher_cb, fd, ev_events); |
watcher->data = ev; |
watcher->data = ev; |
Line 87 static void timeout_watcher_cb(struct ev_loop *loop, e
|
Line 89 static void timeout_watcher_cb(struct ev_loop *loop, e
|
UNUSED(loop); |
UNUSED(loop); |
UNUSED(w); |
UNUSED(w); |
UNUSED(revents); |
UNUSED(revents); |
|
|
ev_timer_stop(loop, w); |
|
} |
} |
|
|
|
static ev_timer timeout_watcher; |
|
|
static int fdevent_libev_poll(fdevents *ev, int timeout_ms) { |
static int fdevent_libev_poll(fdevents *ev, int timeout_ms) { |
union { | timeout_watcher.repeat = (timeout_ms > 0) ? timeout_ms/1000.0 : 0.001; |
struct ev_watcher w; | |
struct ev_timer timer; | |
} timeout_watcher; | |
|
|
if (!timeout_ms) timeout_ms = 1; | ev_timer_again(ev->libev_loop, &timeout_watcher); |
| ev_run(ev->libev_loop, EVRUN_ONCE); |
|
|
ev_init(&timeout_watcher.w, NULL); |
|
ev_set_cb(&timeout_watcher.timer, timeout_watcher_cb); |
|
timeout_watcher.timer.repeat = ((ev_tstamp) timeout_ms)/1000.0; |
|
assert(timeout_watcher.timer.repeat); |
|
ev_timer_again(ev->libev_loop, &timeout_watcher.timer); |
|
|
|
ev_loop(ev->libev_loop, EVLOOP_ONESHOT); |
|
|
|
ev_timer_stop(ev->libev_loop, &timeout_watcher.timer); |
|
|
|
return 0; |
return 0; |
} |
} |
|
|
Line 143 static int fdevent_libev_reset(fdevents *ev) {
|
Line 132 static int fdevent_libev_reset(fdevents *ev) {
|
} |
} |
|
|
int fdevent_libev_init(fdevents *ev) { |
int fdevent_libev_init(fdevents *ev) { |
|
struct ev_timer * const timer = &timeout_watcher; |
|
|
ev->type = FDEVENT_HANDLER_LIBEV; |
ev->type = FDEVENT_HANDLER_LIBEV; |
#define SET(x) \ |
#define SET(x) \ |
ev->x = fdevent_libev_##x; |
ev->x = fdevent_libev_##x; |
Line 164 int fdevent_libev_init(fdevents *ev) {
|
Line 155 int fdevent_libev_init(fdevents *ev) {
|
|
|
return -1; |
return -1; |
} |
} |
|
|
|
ev_timer_init(timer, timeout_watcher_cb, 0.0, 1.0); |
|
|
return 0; |
return 0; |
} |
} |