In some cases, main thread got some problem and exit with calling
_eglAtExit, while another thread may still be running, that will
cause assert in mesa.
Change-Id: I6ee87abcb8c818e8a6808cd6098f4061bf7779b2
Signed-Off-by: Xuelian Bai <xuelian.bai@samsung.com>
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
const __DRIextension **extensions;
+ /*This exception only happen in multithread case, when _eglAtExit is *
+ *called and disp is freed in main thread. */
+ if (dri2_dpy == NULL) {
+ _eglLog(_EGL_FATAL, "DRI2: disp is freed");
+ return EGL_FALSE;
+ }
+
extensions = dri2_open_driver(disp);
if (!extensions)
return EGL_FALSE;
simple_mtx_lock(_eglGlobal.Mutex);
dev = _eglGlobal.DeviceList;
+ /*This exception only happen in multithread case, when _eglAtExit is *
+ *called and _eglFiniDevice(where _eglGlobal.DeviceList is set to null)*
+ *is called in main thread. */
+ if (dev == NULL) {
+ _eglLog(_EGL_FATAL, "_eglGlobal.DeviceList is freed");
+ goto out;
+ }
+
/* The first device is always software */
assert(dev);
assert(_eglDeviceSupports(dev, _EGL_DEVICE_SOFTWARE));