mirror of https://github.com/getdnsapi/getdns.git
Merge pull request #476 from elindsey/develop
register only a single poll_t with libuv
This commit is contained in:
commit
7c767b1a5f
|
@ -73,8 +73,7 @@ getdns_libuv_cleanup(getdns_eventloop *loop)
|
|||
}
|
||||
|
||||
typedef struct poll_timer {
|
||||
uv_poll_t read;
|
||||
uv_poll_t write;
|
||||
uv_poll_t poll;
|
||||
uv_timer_t timer;
|
||||
int to_close;
|
||||
struct mem_funcs mf;
|
||||
|
@ -111,15 +110,8 @@ getdns_libuv_clear(getdns_eventloop *loop, getdns_eventloop_event *el_ev)
|
|||
DEBUG_UV("enter libuv_clear(el_ev = %p, my_ev = %p, to_close = %d)\n"
|
||||
, el_ev, my_ev, my_ev->to_close);
|
||||
|
||||
if (el_ev->read_cb) {
|
||||
my_poll = &my_ev->read;
|
||||
uv_poll_stop(my_poll);
|
||||
my_ev->to_close += 1;
|
||||
my_poll->data = my_ev;
|
||||
uv_close((uv_handle_t *)my_poll, getdns_libuv_close_cb);
|
||||
}
|
||||
if (el_ev->write_cb) {
|
||||
my_poll = &my_ev->write;
|
||||
if (el_ev->read_cb || el_ev->write_cb) {
|
||||
my_poll = &my_ev->poll;
|
||||
uv_poll_stop(my_poll);
|
||||
my_ev->to_close += 1;
|
||||
my_poll->data = my_ev;
|
||||
|
@ -139,29 +131,28 @@ getdns_libuv_clear(getdns_eventloop *loop, getdns_eventloop_event *el_ev)
|
|||
}
|
||||
|
||||
static void
|
||||
getdns_libuv_read_cb(uv_poll_t *poll, int status, int events)
|
||||
getdns_libuv_cb(uv_poll_t *poll, int status, int events)
|
||||
{
|
||||
getdns_eventloop_event *el_ev = (getdns_eventloop_event *)poll->data;
|
||||
(void)status; (void)events;
|
||||
assert(el_ev->read_cb);
|
||||
DEBUG_UV("enter libuv_read_cb(el_ev = %p, el_ev->ev = %p)\n"
|
||||
, el_ev, el_ev->ev);
|
||||
el_ev->read_cb(el_ev->userarg);
|
||||
DEBUG_UV("exit libuv_read_cb(el_ev = %p, el_ev->ev = %p)\n"
|
||||
, el_ev, el_ev->ev);
|
||||
}
|
||||
getdns_eventloop_event *el_ev = (getdns_eventloop_event *)poll->data;
|
||||
(void)status;
|
||||
|
||||
static void
|
||||
getdns_libuv_write_cb(uv_poll_t *poll, int status, int events)
|
||||
{
|
||||
getdns_eventloop_event *el_ev = (getdns_eventloop_event *)poll->data;
|
||||
(void)status; (void)events;
|
||||
assert(el_ev->write_cb);
|
||||
DEBUG_UV("enter libuv_write_cb(el_ev = %p, el_ev->ev = %p)\n"
|
||||
, el_ev, el_ev->ev);
|
||||
el_ev->write_cb(el_ev->userarg);
|
||||
DEBUG_UV("exit libuv_write_cb(el_ev = %p, el_ev->ev = %p)\n"
|
||||
, el_ev, el_ev->ev);
|
||||
if (events & UV_READABLE) {
|
||||
assert(el_ev->read_cb);
|
||||
DEBUG_UV("enter libuv_read_cb(el_ev = %p, el_ev->ev = %p)\n"
|
||||
, el_ev, el_ev->ev);
|
||||
el_ev->read_cb(el_ev->userarg);
|
||||
DEBUG_UV("exit libuv_read_cb(el_ev = %p, el_ev->ev = %p)\n"
|
||||
, el_ev, el_ev->ev);
|
||||
} else if (events & UV_WRITABLE) {
|
||||
assert(el_ev->write_cb);
|
||||
DEBUG_UV("enter libuv_write_cb(el_ev = %p, el_ev->ev = %p)\n"
|
||||
, el_ev, el_ev->ev);
|
||||
el_ev->write_cb(el_ev->userarg);
|
||||
DEBUG_UV("exit libuv_write_cb(el_ev = %p, el_ev->ev = %p)\n"
|
||||
, el_ev, el_ev->ev);
|
||||
} else {
|
||||
assert(ASSERT_UNREACHABLE);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -205,18 +196,15 @@ getdns_libuv_schedule(getdns_eventloop *loop,
|
|||
my_ev->to_close = 0;
|
||||
my_ev->mf = ext->mf;
|
||||
el_ev->ev = my_ev;
|
||||
|
||||
if (el_ev->read_cb) {
|
||||
my_poll = &my_ev->read;
|
||||
|
||||
if (el_ev->read_cb || el_ev->write_cb) {
|
||||
my_poll = &my_ev->poll;
|
||||
my_poll->data = el_ev;
|
||||
uv_poll_init(ext->loop, my_poll, fd);
|
||||
uv_poll_start(my_poll, UV_READABLE, getdns_libuv_read_cb);
|
||||
}
|
||||
if (el_ev->write_cb) {
|
||||
my_poll = &my_ev->write;
|
||||
my_poll->data = el_ev;
|
||||
uv_poll_init(ext->loop, my_poll, fd);
|
||||
uv_poll_start(my_poll, UV_WRITABLE, getdns_libuv_write_cb);
|
||||
int events =
|
||||
(el_ev->read_cb ? UV_READABLE : 0) |
|
||||
(el_ev->write_cb ? UV_WRITABLE : 0);
|
||||
uv_poll_start(my_poll, events, getdns_libuv_cb);
|
||||
}
|
||||
if (el_ev->timeout_cb) {
|
||||
my_timer = &my_ev->timer;
|
||||
|
|
Loading…
Reference in New Issue