From d51840efd77a891d5988c4a60a924be175dee239 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Wed, 5 Mar 2014 10:30:02 +0100 Subject: [PATCH 1/3] Removed uv_data->polling field It's not necessary as uv_is_active can be used to check if a handle is started or not. --- src/extension/libuv.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/extension/libuv.c b/src/extension/libuv.c index 40a5f9e8..30ddad1a 100644 --- a/src/extension/libuv.c +++ b/src/extension/libuv.c @@ -44,7 +44,6 @@ struct getdns_libuv_data { uv_loop_t* loop; uv_poll_t* poll_handle; - uint8_t polling; }; static void request_count_changed(uint32_t request_count, struct getdns_libuv_data *uv_data); @@ -65,12 +64,10 @@ getdns_libuv_cb(uv_poll_t* handle, int status, int events) { static void request_count_changed(uint32_t request_count, struct getdns_libuv_data *uv_data) { - if (request_count > 0 && uv_data->polling == 0) { + if (request_count > 0 && !uv_is_active((uv_handle_t*) uv_data->poll_handle)) { uv_poll_start(uv_data->poll_handle, UV_READABLE, getdns_libuv_cb); - uv_data->polling = 1; - } else if (request_count == 0 && uv_data->polling == 1) { + } else if (request_count == 0 && uv_is_active((uv_handle_t*) uv_data->poll_handle)) { uv_poll_stop(uv_data->poll_handle); - uv_data->polling = 0; } } @@ -169,6 +166,5 @@ getdns_extension_set_libuv_loop(struct getdns_context *context, uv_poll_init(uv_loop, uv_data->poll_handle, fd); uv_data->poll_handle->data = context; uv_data->loop = uv_loop; - uv_data->polling = 0; return getdns_extension_set_eventloop(context, &LIBUV_EXT, uv_data); } /* getdns_extension_set_libuv_loop */ From edd2c81bc53c3b1ca37cc19a212cc04e4e40c8cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Wed, 5 Mar 2014 10:34:02 +0100 Subject: [PATCH 2/3] Remove uneeded check libuv will always pass the handle to the close callback --- src/extension/libuv.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/extension/libuv.c b/src/extension/libuv.c index 30ddad1a..ab3a1b53 100644 --- a/src/extension/libuv.c +++ b/src/extension/libuv.c @@ -83,9 +83,7 @@ getdns_libuv_timeout_cb(uv_timer_t* handle, int status) { static void getdns_libuv_close_cb(uv_handle_t* handle) { - if (handle) { - free(handle); - } + free(handle); } /* getdns extension functions */ From 785ebf4ed6ddad36e72f1587124d614fb399ecad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Wed, 5 Mar 2014 10:34:37 +0100 Subject: [PATCH 3/3] Handle possible allocation failure --- src/extension/libuv.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/extension/libuv.c b/src/extension/libuv.c index ab3a1b53..ca242566 100644 --- a/src/extension/libuv.c +++ b/src/extension/libuv.c @@ -161,6 +161,10 @@ getdns_extension_set_libuv_loop(struct getdns_context *context, } int fd = getdns_context_fd(context); uv_data->poll_handle = (uv_poll_t*) malloc(sizeof(uv_poll_t)); + if (!uv_data->poll_handle) { + free(uv_data); + return GETDNS_RETURN_MEMORY_ERROR; + } uv_poll_init(uv_loop, uv_data->poll_handle, fd); uv_data->poll_handle->data = context; uv_data->loop = uv_loop;