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 * --
