Shit, missed the release for 5min. :/

On Fri, Dec 7, 2012 at 3:55 PM, Enlightenment SVN
<no-re...@enlightenment.org> wrote:
> Log:
> Backport 80476.
>
>   ecore-wayland: Fix monitoring ECORE_FD_WRITE defaultly on
>                  wayland display fd lead to 100% cpu usage
>
>   In ecore_wl_init(), adding wayland display fd with ECORE_FD_WRITE
>   flag make CPU usage 100%. The proper way to monitor the ECORE_FD_WRITE
>   is when the wl_display_flush() return value < 0 and errno == EAGAIN.
>   And if wl_display_flush() return, we remove ECORE_FD_WRITE flag from
>   the display fd.
>
>   Patch by: Alex Wu <zhiwen...@linux.intel.com>
>
>
>
> Author:       etrunko
> Date:         2012-12-07 09:55:37 -0800 (Fri, 07 Dec 2012)
> New Revision: 80479
> Trac:         http://trac.enlightenment.org/e/changeset/80479
>
> Modified:
>   branches/ecore-1.7/src/lib/ecore_wayland/ecore_wl.c
>
> Modified: branches/ecore-1.7/src/lib/ecore_wayland/ecore_wl.c
> ===================================================================
> --- branches/ecore-1.7/src/lib/ecore_wayland/ecore_wl.c 2012-12-07 17:52:51 
> UTC (rev 80478)
> +++ branches/ecore-1.7/src/lib/ecore_wayland/ecore_wl.c 2012-12-07 17:55:37 
> UTC (rev 80479)
> @@ -33,6 +33,7 @@
>
>  /* local function prototypes */
>  static Eina_Bool _ecore_wl_shutdown(Eina_Bool close);
> +static Eina_Bool _ecore_wl_cb_idle_enterer(void *data);
>  static Eina_Bool _ecore_wl_cb_handle_data(void *data, Ecore_Fd_Handler *hdl);
>  static void _ecore_wl_cb_handle_global(void *data, struct wl_registry 
> *registry, unsigned int id, const char *interface, unsigned int version 
> __UNUSED__);
>  static Eina_Bool _ecore_wl_xkb_init(Ecore_Wl_Display *ewd);
> @@ -164,10 +165,11 @@
>
>     _ecore_wl_disp->fd_hdl =
>       ecore_main_fd_handler_add(_ecore_wl_disp->fd,
> -                               ECORE_FD_READ | ECORE_FD_WRITE,
> +                               ECORE_FD_READ,
>                                 _ecore_wl_cb_handle_data, _ecore_wl_disp,
>                                 NULL, NULL);
>
> +   ecore_idle_enterer_add(_ecore_wl_cb_idle_enterer, _ecore_wl_disp);
>     wl_list_init(&_ecore_wl_disp->inputs);
>     wl_list_init(&_ecore_wl_disp->outputs);
>
> @@ -422,10 +424,32 @@
>     return _ecore_wl_init_count;
>  }
>
> +static Eina_Bool
> +_ecore_wl_cb_idle_enterer(void *data)
> +{
> +   Ecore_Wl_Display *ewd;
> +   int ret;
> +
> +   if (!(ewd = data)) return ECORE_CALLBACK_RENEW;
> +
> +   ret = wl_display_flush(ewd->wl.display);
> +   if (ret < 0 && errno == EAGAIN)
> +     {
> +        ecore_main_fd_handler_active_set(ewd->fd_hdl, ECORE_FD_READ | 
> ECORE_FD_WRITE);
> +     }
> +   else if (ret < 0)
> +     {
> +      /* FIXME: need do error processing? */
> +     }
> +
> +   return ECORE_CALLBACK_RENEW;
> +}
> +
>  static Eina_Bool
>  _ecore_wl_cb_handle_data(void *data, Ecore_Fd_Handler *hdl)
>  {
>     Ecore_Wl_Display *ewd;
> +   int ret;
>
>     /* LOGFN(__FILE__, __LINE__, __FUNCTION__); */
>
> @@ -438,7 +462,15 @@
>     if (ecore_main_fd_handler_active_get(hdl, ECORE_FD_READ))
>       wl_display_dispatch(ewd->wl.display);
>     else if (ecore_main_fd_handler_active_get(hdl, ECORE_FD_WRITE))
> -     wl_display_flush(ewd->wl.display);
> +     {
> +        ret = wl_display_flush(ewd->wl.display);
> +        if (ret == 0)
> +          ecore_main_fd_handler_active_set(hdl, ECORE_FD_READ);
> +        else if (ret == -1 && errno != EAGAIN)
> +          {
> +            /* FIXME: need do error processing? */
> +          }
> +     }
>
>     return ECORE_CALLBACK_RENEW;
>  }
>
>
> ------------------------------------------------------------------------------
> LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
> Remotely access PCs and mobile devices and provide instant support
> Improve your efficiency, and focus on delivering more value-add services
> Discover what IT Professionals Know. Rescue delivers
> http://p.sf.net/sfu/logmein_12329d2d
> _______________________________________________
> enlightenment-svn mailing list
> enlightenment-...@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-svn



-- 
Eduardo de Barros Lima ◤✠◢
ebl...@gmail.com

------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to