a0fef1c8bb
When eglTerminate() is called with a window surface still exists, a deadlock would occur since egl_display_t::terminate() holds a lock while destroying the window surface, which calls onWindowSurfaceDestroyed() which attempts to take the same lock. This change refactors the hibernation code and data into a separate object with its own lock, separate from the egl_display_t lock. This avoids the deadlock and better encapsulates the hibernation logic. The change also fixes a bug discovered incidentally while debugging: hibernating after calling eglTerminate() succeeds, but will cause awakens from subsequent eglInitialize() to fail. We will no longer hibernate a terminated display. Change-Id: If55e5bb603d4f8953babc439ffc8d8a60af103d9 |
||
---|---|---|
.. | ||
egl_cache.cpp | ||
egl_cache.h | ||
egl_display.cpp | ||
egl_display.h | ||
egl_entries.in | ||
egl_object.cpp | ||
egl_object.h | ||
egl_tls.cpp | ||
egl_tls.h | ||
egl.cpp | ||
eglApi.cpp | ||
egldefs.h | ||
getProcAddress.cpp | ||
Loader.cpp | ||
Loader.h | ||
trace.cpp |