raster pushed a commit to branch efl-1.22.

http://git.enlightenment.org/core/efl.git/commit/?id=bbca7d549b07e667957160d0756eca14fe37f1ca

commit bbca7d549b07e667957160d0756eca14fe37f1ca
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Wed Aug 7 18:14:06 2019 +0100

    ecore evas drm - fix code that forgets to del an fd handler
    
    also.. note the badness of the code design mixing a global singleton
    with a "per struct" set of data like fd handlers for the same devices
    initted only once but... anyway. it's messy.
---
 src/modules/ecore_evas/engines/drm/ecore_evas_drm.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c 
b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
index c60293cb40..a85bc3d3fe 100644
--- a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
+++ b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
@@ -140,6 +140,8 @@ _drm_device_change(void *d EINA_UNUSED, int t EINA_UNUSED, 
void *event)
 static int
 _ecore_evas_drm_init(Ecore_Evas *ee, Ecore_Evas_Engine_Drm_Data *edata, const 
char *device)
 {
+   // XXX: this is broken. we init once but in a per ecore evas struct so
+   // we assume there will be only 1 of these drm ecore evas's ever...
    if (++_drm_init_count != 1) return _drm_init_count;
 
    if (!ecore_drm2_init())
@@ -204,8 +206,12 @@ _ecore_evas_drm_shutdown(Ecore_Evas_Engine_Drm_Data *edata)
         ecore_job_del(edata->focus_job);
         edata->focus_job = NULL;
      }
-   ecore_drm2_outputs_destroy(edata->dev);
-   ecore_drm2_device_close(edata->dev);
+   if (edata->dev)
+     {
+        ecore_drm2_outputs_destroy(edata->dev);
+        ecore_drm2_device_close(edata->dev);
+        edata->dev = NULL;
+     }
    ecore_drm2_shutdown();
    ecore_event_evas_shutdown();
    EINA_LIST_FREE(handlers, h)
@@ -223,6 +229,8 @@ _drm_free(Ecore_Evas *ee)
 
    edata = ee->engine.data;
    canvases = eina_list_remove(canvases, ee);
+   ecore_main_fd_handler_del(edata->hdlr);
+   edata->hdlr = NULL;
    _ecore_evas_drm_shutdown(edata);
    free(edata);
 }

-- 


Reply via email to