discomfitor pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=aab3cca0be4abbea8b11d4e6146315db8044d0d5
commit aab3cca0be4abbea8b11d4e6146315db8044d0d5 Author: Mike Blumenkrantz <[email protected]> Date: Fri Apr 7 16:06:41 2017 -0400 ecore-wl2: do not reconnect on protocol error for non-server processes this is not a recoverable state @fix --- src/lib/ecore_wl2/ecore_wl2_display.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/lib/ecore_wl2/ecore_wl2_display.c b/src/lib/ecore_wl2/ecore_wl2_display.c index c45306f..41f8659 100644 --- a/src/lib/ecore_wl2/ecore_wl2_display.c +++ b/src/lib/ecore_wl2/ecore_wl2_display.c @@ -318,9 +318,9 @@ _recovery_timer_add(Ecore_Wl2_Display *ewd) } static void -_begin_recovery_maybe(Ecore_Wl2_Display *ewd) +_begin_recovery_maybe(Ecore_Wl2_Display *ewd, int code) { - if (ewd->wl.session_recovery)// && (errno == EPIPE)) + if ((_server_displays || (code != EPROTO)) && ewd->wl.session_recovery)// && (errno == EPIPE)) _recovery_timer_add(ewd); else { @@ -333,28 +333,30 @@ static Eina_Bool _cb_connect_data(void *data, Ecore_Fd_Handler *hdl) { Ecore_Wl2_Display *ewd = data; - int ret = 0; + int ret = 0, code; if (ecore_main_fd_handler_active_get(hdl, ECORE_FD_READ)) { ret = wl_display_dispatch(ewd->wl.display); - if ((ret < 0) && (errno != EAGAIN)) goto err; + code = errno; + if ((ret < 0) && (code != EAGAIN)) goto err; } if (ecore_main_fd_handler_active_get(hdl, ECORE_FD_WRITE)) { ret = wl_display_flush(ewd->wl.display); + code = errno; if (ret == 0) ecore_main_fd_handler_active_set(hdl, ECORE_FD_READ); - if ((ret < 0) && (errno != EAGAIN)) goto err; + if ((ret < 0) && (code != EAGAIN)) goto err; } return ECORE_CALLBACK_RENEW; err: ewd->fd_hdl = NULL; - _begin_recovery_maybe(ewd); + _begin_recovery_maybe(ewd, code); return ECORE_CALLBACK_CANCEL; } @@ -375,26 +377,29 @@ static Eina_Bool _cb_connect_idle(void *data) { Ecore_Wl2_Display *ewd = data; - int ret = 0; + int ret = 0, code; ret = wl_display_get_error(ewd->wl.display); + code = errno; if (ret < 0) goto err; ret = wl_display_dispatch_pending(ewd->wl.display); + code = errno; if (ret < 0) goto err; ret = wl_display_flush(ewd->wl.display); - if ((ret < 0) && (errno == EAGAIN)) + code = errno; + if ((ret < 0) && (code == EAGAIN)) ecore_main_fd_handler_active_set(ewd->fd_hdl, (ECORE_FD_READ | ECORE_FD_WRITE)); return ECORE_CALLBACK_RENEW; err: - if ((ret < 0) && (errno != EAGAIN)) + if ((ret < 0) && (code != EAGAIN)) { ewd->idle_enterer = NULL; - _begin_recovery_maybe(ewd); + _begin_recovery_maybe(ewd, code); return ECORE_CALLBACK_CANCEL; } --
