From 27470f329ef9d4b53e13f85af391ba5b42025d43 Mon Sep 17 00:00:00 2001 From: Xuelian Date: Tue, 12 May 2020 19:00:12 +0800 Subject: [PATCH] Add exception handle for multithread case. 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 --- src/egl/drivers/dri2/egl_dri2.c | 7 +++++++ src/egl/main/egldevice.c | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index df2a13f..d04ed54 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -826,6 +826,13 @@ dri2_load_driver_common(_EGLDisplay *disp, 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; diff --git a/src/egl/main/egldevice.c b/src/egl/main/egldevice.c index c1c421b..22346ca 100644 --- a/src/egl/main/egldevice.c +++ b/src/egl/main/egldevice.c @@ -171,6 +171,14 @@ _eglAddDevice(int fd, bool software) 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)); -- 2.7.4