diff options
author | Marcel Hollerbach <marcel-hollerbach@t-online.de> | 2016-01-11 22:53:18 +0100 |
---|---|---|
committer | Marcel Hollerbach <marcel-hollerbach@t-online.de> | 2016-01-12 19:25:15 +0100 |
commit | a56d2d934d4dc61a8fcb651afa12e14435bc9a01 (patch) | |
tree | 3701213b1cfd40042a17e9a273e089c84b3347f2 | |
parent | 6a017242b0914299fbadec3f051a64b7d8e3e140 (diff) | |
download | efl-devs/bu5hm4n/ecore_drm.tar.gz |
ecore_drm: close all devices in shutdowndevs/bu5hm4n/ecore_drm
-rw-r--r-- | src/lib/ecore_drm/ecore_drm.c | 16 | ||||
-rw-r--r-- | src/lib/ecore_drm/ecore_drm_device.c | 10 |
2 files changed, 21 insertions, 5 deletions
diff --git a/src/lib/ecore_drm/ecore_drm.c b/src/lib/ecore_drm/ecore_drm.c index 02dd76edbb..d52cf863e9 100644 --- a/src/lib/ecore_drm/ecore_drm.c +++ b/src/lib/ecore_drm/ecore_drm.c @@ -108,15 +108,18 @@ log_err: /** * Shutdown the Ecore_Drm library. - * + * * @return The number of times the library has been initialized without * being shutdown. 0 is returned if an error occurs. - * + * * @ingroup Ecore_Drm_Init_Group */ -EAPI int +EAPI int ecore_drm_shutdown(void) { + Eina_List *lists; + Ecore_Drm_Device *dev; + /* _ecore_drm_init_count should not go below zero. */ if (_ecore_drm_init_count < 1) { @@ -127,6 +130,13 @@ ecore_drm_shutdown(void) /* if we are still in use, decrement init count and get out */ if (--_ecore_drm_init_count != 0) return _ecore_drm_init_count; + /* free the list of devices */ + lists = eina_list_clone(ecore_drm_devices_get()); + EINA_LIST_FREE(lists, dev) + { + ecore_drm_device_free(dev); + } + /* close eeze */ eeze_shutdown(); diff --git a/src/lib/ecore_drm/ecore_drm_device.c b/src/lib/ecore_drm/ecore_drm_device.c index 1b7fc8b7b0..a91af954d6 100644 --- a/src/lib/ecore_drm/ecore_drm_device.c +++ b/src/lib/ecore_drm/ecore_drm_device.c @@ -277,12 +277,18 @@ ecore_drm_device_free(Ecore_Drm_Device *dev) if (dev->dumb[i]) ecore_drm_fb_destroy(dev->dumb[i]); dev->dumb[i] = NULL; } - + /* destroy all sprites*/ + ecore_drm_sprites_destroy(dev); + /* clear inputs */ ecore_drm_inputs_destroy(dev); - /* free outputs */ EINA_LIST_FREE(dev->outputs, output) ecore_drm_output_free(output); + /* disconnect launcher */ + ecore_drm_launcher_disconnect(dev); + /* close myself */ + ecore_drm_device_close(dev); + /* free crtcs */ if (dev->crtcs) free(dev->crtcs); |