There were potential deadlocks between the per-GLThread monitors and the
GLThreadManager monitor.
To avoid these deadlocks we now use a single monitor for
both the GLThreadManager state and the per-GLThread state.
Converted GLThreadManager's semaphore into the equivalent
synchronized-wait-notifyAll code. This enables us to wait for
either mDone, or user events, or the EGL surface with a single "wait()".
Simplified the logic used to acquire and release the EGL surface. The
EGL surface is now only requested while the surfaceFlinger surface
is acquired.
Removed the "egl surface stealing" policy we had recently inserted.
It's not needed now that we reliably quit when requested.
Pulled user event processing outside of the GLThreadManager monitor
so that we don't call any potentially-long-running code while
inside the monitor.
This should help with bug 2228262.