barbieri pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=f8feeb7d92910d4c4942372612b2178eb3620360
commit f8feeb7d92910d4c4942372612b2178eb3620360 Author: Gustavo Sverzut Barbieri <barbi...@profusion.mobi> Date: Tue Sep 13 16:08:25 2016 -0300 efl_net_dialer_* use timeout promise instead of timer object. i wasn't aware of efl_loop_timeout for one-shot timeout promises, then use it instead of a full object. --- src/lib/ecore_con/efl_net_dialer_tcp.c | 40 +++++++++++++--------------- src/lib/ecore_con/efl_net_dialer_websocket.c | 36 +++++++++++-------------- 2 files changed, 34 insertions(+), 42 deletions(-) diff --git a/src/lib/ecore_con/efl_net_dialer_tcp.c b/src/lib/ecore_con/efl_net_dialer_tcp.c index beb078c..faff27b 100644 --- a/src/lib/ecore_con/efl_net_dialer_tcp.c +++ b/src/lib/ecore_con/efl_net_dialer_tcp.c @@ -39,7 +39,7 @@ typedef struct _Efl_Net_Dialer_Tcp_Data } resolve; struct { Ecore_Thread *thread; - Eo *timer; + Eina_Promise *timeout; } connect; Eina_Stringshare *address_dial; Eina_Stringshare *proxy; @@ -65,10 +65,10 @@ _efl_net_dialer_tcp_efl_object_destructor(Eo *o, Efl_Net_Dialer_Tcp_Data *pd) (!efl_io_closer_closed_get(o))) efl_io_closer_close(o); - if (pd->connect.timer) + if (pd->connect.timeout) { - efl_del(pd->connect.timer); - pd->connect.timer = NULL; + eina_promise_cancel(pd->connect.timeout); + pd->connect.timeout = NULL; } if (pd->connect.thread) @@ -203,13 +203,13 @@ _efl_net_dialer_tcp_resolved(void *data, const char *host EINA_UNUSED, const cha } static void -_efl_net_dialer_tcp_connect_timeout(void *data, const Efl_Event *event EINA_UNUSED) +_efl_net_dialer_tcp_connect_timeout(void *data, void *result EINA_UNUSED) { Eo *o = data; Efl_Net_Dialer_Tcp_Data *pd = efl_data_scope_get(o, MY_CLASS); Eina_Error err = ETIMEDOUT; - pd->connect.timer = NULL; + pd->connect.timeout = NULL; if (pd->resolve.thread) { @@ -284,16 +284,15 @@ _efl_net_dialer_tcp_efl_net_dialer_dial(Eo *o, Efl_Net_Dialer_Tcp_Data *pd EINA_ efl_net_dialer_address_dial_set(o, address); - if (pd->connect.timer) + if (pd->connect.timeout) { - efl_del(pd->connect.timer); - pd->connect.timer = NULL; + eina_promise_cancel(pd->connect.timeout); + pd->connect.timeout = NULL; } if (pd->timeout_dial > 0.0) { - pd->connect.timer = efl_add(EFL_LOOP_TIMER_CLASS, efl_loop_user_loop_get(o), - efl_loop_timer_interval_set(efl_added, pd->timeout_dial), - efl_event_callback_add(efl_added, EFL_LOOP_TIMER_EVENT_TICK, _efl_net_dialer_tcp_connect_timeout, o)); + pd->connect.timeout = efl_loop_timeout(efl_loop_user_loop_get(o), pd->timeout_dial, o); + eina_promise_then(pd->connect.timeout, _efl_net_dialer_tcp_connect_timeout, NULL, o); } return 0; @@ -328,16 +327,15 @@ EOLIAN static void _efl_net_dialer_tcp_efl_net_dialer_timeout_dial_set(Eo *o EINA_UNUSED, Efl_Net_Dialer_Tcp_Data *pd, double seconds) { pd->timeout_dial = seconds; - if (pd->connect.timer) + if (pd->connect.timeout) { - efl_del(pd->connect.timer); - pd->connect.timer = NULL; + eina_promise_cancel(pd->connect.timeout); + pd->connect.timeout = NULL; } if (pd->timeout_dial > 0.0) { - pd->connect.timer = efl_add(EFL_LOOP_TIMER_CLASS, efl_loop_user_loop_get(o), - efl_loop_timer_interval_set(efl_added, pd->timeout_dial), - efl_event_callback_add(efl_added, EFL_LOOP_TIMER_EVENT_TICK, _efl_net_dialer_tcp_connect_timeout, o)); + pd->connect.timeout = efl_loop_timeout(efl_loop_user_loop_get(o), pd->timeout_dial, o); + eina_promise_then(pd->connect.timeout, _efl_net_dialer_tcp_connect_timeout, NULL, o); } } @@ -350,10 +348,10 @@ _efl_net_dialer_tcp_efl_net_dialer_timeout_dial_get(Eo *o EINA_UNUSED, Efl_Net_D EOLIAN static void _efl_net_dialer_tcp_efl_net_dialer_connected_set(Eo *o, Efl_Net_Dialer_Tcp_Data *pd, Eina_Bool connected) { - if (pd->connect.timer) + if (pd->connect.timeout) { - efl_del(pd->connect.timer); - pd->connect.timer = NULL; + eina_promise_cancel(pd->connect.timeout); + pd->connect.timeout = NULL; } if (pd->connected == connected) return; pd->connected = connected; diff --git a/src/lib/ecore_con/efl_net_dialer_websocket.c b/src/lib/ecore_con/efl_net_dialer_websocket.c index 10846ba..2cf7247 100644 --- a/src/lib/ecore_con/efl_net_dialer_websocket.c +++ b/src/lib/ecore_con/efl_net_dialer_websocket.c @@ -159,7 +159,7 @@ typedef struct _Efl_Net_Dialer_Websocket_Pending_Read { typedef struct _Efl_Net_Dialer_Websocket_Data { Eo *http; - Eo *close_timer; + Eina_Promise *close_timeout; Eina_Promise *job; Eina_Stringshare *address_dial; /* must rewrite ws->http, wss->https */ Eina_Stringshare *address_remote; /* must rewrite ws->http, wss->https */ @@ -543,10 +543,10 @@ _efl_net_dialer_websocket_job_dispatch_frame(Eo *o, Efl_Net_Dialer_Websocket_Dat efl_io_closer_close(o); else efl_event_callback_call(o, EFL_IO_CLOSER_EVENT_CLOSED, NULL); - if (pd->close_timer) + if (pd->close_timeout) { - efl_del(pd->close_timer); - pd->close_timer = NULL; + eina_promise_cancel(pd->close_timeout); + pd->close_timeout = NULL; } break; } @@ -964,10 +964,10 @@ _efl_net_dialer_websocket_efl_object_destructor(Eo *o, Efl_Net_Dialer_Websocket_ Eina_Stringshare *str; efl_event_callback_array_del(pd->http, _efl_net_dialer_websocket_http_cbs(), o); - if (pd->close_timer) + if (pd->close_timeout) { - efl_del(pd->close_timer); - pd->close_timer = NULL; + eina_promise_cancel(pd->close_timeout); + pd->close_timeout = NULL; } efl_del(pd->http); @@ -1495,13 +1495,12 @@ _efl_net_dialer_websocket_binary_send(Eo *o, Efl_Net_Dialer_Websocket_Data *pd, } static void -_efl_net_dialer_websocket_close_request_timeout(void *data, const Efl_Event *event) +_efl_net_dialer_websocket_close_request_timeout(void *data, void *result EINA_UNUSED) { Eo *o = data; Efl_Net_Dialer_Websocket_Data *pd = efl_data_scope_get(o, MY_CLASS); - efl_del(event->object); - pd->close_timer = NULL; + pd->close_timeout = NULL; DBG("server did not close the TCP socket, timeout"); efl_event_callback_call(o, EFL_IO_CLOSER_EVENT_CLOSED, NULL); } @@ -1514,17 +1513,12 @@ _efl_net_dialer_websocket_close_request(Eo *o, Efl_Net_Dialer_Websocket_Data *pd size_t len; EINA_SAFETY_ON_TRUE_RETURN(pd->close_requested); - if (pd->close_timer) - { - efl_loop_timer_interval_set(pd->close_timer, 2.0); - efl_loop_timer_reset(pd->close_timer); - } - else - { - pd->close_timer = efl_add(EFL_LOOP_TIMER_CLASS, efl_loop_user_loop_get(o), - efl_loop_timer_interval_set(efl_added, 2.0), - efl_event_callback_add(efl_added, EFL_LOOP_TIMER_EVENT_TICK, _efl_net_dialer_websocket_close_request_timeout, o)); - } + if (pd->close_timeout) + eina_promise_cancel(pd->close_timeout); + + pd->close_timeout = efl_loop_timeout(efl_loop_user_loop_get(o), 2.0, o); + eina_promise_then(pd->close_timeout, _efl_net_dialer_websocket_close_request_timeout, NULL, o); + efl_io_writer_can_write_set(o, EINA_FALSE); if ((!reason) || (reason == EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_NO_REASON)) --