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
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);
#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)
{
dev->session = NULL;
DBG("Using Drm Device: %s", dev->drm.name);
+
+ drm_devices = eina_list_append(drm_devices, dev);
}
out:
/* free session */
free(dev->session);
+ drm_devices = eina_list_remove(drm_devices, dev);
+
/* free structure */
free(dev);
}
return EINA_TRUE;
}
+EAPI Eina_List *
+ecore_drm_devices_get(void)
+{
+ return drm_devices;
+}
+
/**
* Get if a given Ecore_Drm_Device is master
*