devilhorns pushed a commit to branch master.

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

commit 9baacf802d637b2573af58e3d5c4fe1f336792cf
Author: Boram Park <[email protected]>
Date:   Tue Mar 17 09:30:59 2015 -0400

    ecore-drm: add ecore_drm_devices_get to get the list of drm devices
    
    Summary:
        when enlightenment is working as wayland display server, enlightenment
        changes KDSETMODE to KD_GRAPHICS in _ecore_drm_tty_setup(). However,
        when enlightenment is killed by SIGSEGV, it doesn't changes KDSETMODE
        to KD_TEXT because englightenment process doesn't call 
ecore_drm_tty_close().
        To make possible enlightenment call ecore_drm_tty_close(), drm devices
        should be exposed.
        When enlightenment is killed by SIGSEGV, it will get drm devices with
        ecore_drm_device_get_list(), and will call 
ecore_drm_launcher_disconnect(),
        and ecore_drm_launcher_disconnect will call ecore_drm_tty_close() 
internally.
    
    @feature
    
    Change-Id: I1c594739ec96660a09cee77b823ace6548ee5282
    
    Reviewers: zmike, cedric, raster, gwanglim, devilhorns
    
    Subscribers: cedric
    
    Differential Revision: https://phab.enlightenment.org/D2159
---
 src/lib/ecore_drm/Ecore_Drm.h        | 10 ++++++++++
 src/lib/ecore_drm/ecore_drm_device.c | 12 ++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/src/lib/ecore_drm/Ecore_Drm.h b/src/lib/ecore_drm/Ecore_Drm.h
index 10928ed..ff460e3 100644
--- a/src/lib/ecore_drm/Ecore_Drm.h
+++ b/src/lib/ecore_drm/Ecore_Drm.h
@@ -326,4 +326,14 @@ EAPI Eina_Stringshare 
*ecore_drm_output_make_get(Ecore_Drm_Output *output);
  */
 EAPI void ecore_drm_device_pointer_xy_get(Ecore_Drm_Device *dev, int *x, int 
*y);
 
+/**
+ * Get the list of drm devices which are allocated.
+ *
+ * @return Eina_List of drm devices, NULL otherwise
+ *
+ * @ingroup Ecore_Drm_Device_Group
+ * @since 1.14
+ */
+EAPI Eina_List *ecore_drm_devices_get(void);
+
 #endif
diff --git a/src/lib/ecore_drm/ecore_drm_device.c 
b/src/lib/ecore_drm/ecore_drm_device.c
index 89c6b86..917a02b 100644
--- a/src/lib/ecore_drm/ecore_drm_device.c
+++ b/src/lib/ecore_drm/ecore_drm_device.c
@@ -5,6 +5,8 @@
 #include "ecore_drm_private.h"
 #include <dlfcn.h>
 
+static Eina_List *drm_devices;
+
 static void 
 _ecore_drm_device_cb_page_flip(int fd EINA_UNUSED, unsigned int frame 
EINA_UNUSED, unsigned int sec EINA_UNUSED, unsigned int usec EINA_UNUSED, void 
*data)
 {
@@ -191,6 +193,8 @@ cont:
         dev->session = NULL;
 
         DBG("Using Drm Device: %s", dev->drm.name);
+
+        drm_devices = eina_list_append(drm_devices, dev);
      }
 
 out:
@@ -236,6 +240,8 @@ ecore_drm_device_free(Ecore_Drm_Device *dev)
    /* free session */
    free(dev->session);
 
+   drm_devices = eina_list_remove(drm_devices, dev);
+
    /* free structure */
    free(dev);
 }
@@ -334,6 +340,12 @@ ecore_drm_device_close(Ecore_Drm_Device *dev)
    return EINA_TRUE;
 }
 
+EAPI Eina_List *
+ecore_drm_devices_get(void)
+{
+   return drm_devices;
+}
+
 /**
  * Get if a given Ecore_Drm_Device is master
  * 

-- 


Reply via email to