ecore-drm: add ecore_drm_devices_get to get the list of drm devices 97/36997/3 accepted/tizen/common/20150319.090616 accepted/tizen/mobile/20150320.005832 accepted/tizen/tv/20150320.005600 accepted/tizen/wearable/20150319.095359 submit/tizen/20150318.130107
authorBoram Park <boram1288.park@samsung.com>
Tue, 17 Mar 2015 13:30:59 +0000 (09:30 -0400)
committerGwanglim Lee <gl77.lee@samsung.com>
Wed, 18 Mar 2015 04:02:39 +0000 (21:02 -0700)
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

Reviewers: zmike, cedric, raster, gwanglim, devilhorns

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D2159

Change-Id: Ie32b6eb02831bd95fd23d6a4f1dae372f999f4cc

src/lib/ecore_drm/Ecore_Drm.h
src/lib/ecore_drm/ecore_drm_device.c

index 286aa20..f2f3699 100644 (file)
@@ -163,6 +163,7 @@ EAPI extern int ECORE_DRM_EVENT_ACTIVATE;
 EAPI int ecore_drm_init(void);
 EAPI int ecore_drm_shutdown(void);
 
+EAPI Eina_List *ecore_drm_devices_get(void);
 EAPI Ecore_Drm_Device *ecore_drm_device_find(const char *name, const char *seat);
 EAPI void ecore_drm_device_free(Ecore_Drm_Device *dev);
 EAPI Eina_Bool ecore_drm_device_open(Ecore_Drm_Device *dev);
index 5d0c0bc..c2f0d02 100644 (file)
@@ -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
  *