Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 843cbb24 authored by Michael Lentine's avatar Michael Lentine
Browse files

Modify EGL to disconnect the window when the surface gets destroyed.

Bug: 14445579

Change-Id: I1d263ff6cffcb6e448761fca7ca4b06466ad65aa
parent 119b765a
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -825,8 +825,8 @@ status_t BufferQueueProducer::disconnect(int api) {
                    mCore->mSidebandStream.clear();
                    mCore->mSidebandStream.clear();
                    mCore->mDequeueCondition.broadcast();
                    mCore->mDequeueCondition.broadcast();
                    listener = mCore->mConsumerListener;
                    listener = mCore->mConsumerListener;
                } else {
                } else if (mCore->mConnectedApi != BufferQueueCore::NO_CONNECTED_API) {
                    BQ_LOGE("disconnect(P): connected to another API "
                    BQ_LOGE("disconnect(P): still connected to another API "
                            "(cur=%d req=%d)", mCore->mConnectedApi, api);
                            "(cur=%d req=%d)", mCore->mConnectedApi, api);
                    status = BAD_VALUE;
                    status = BAD_VALUE;
                }
                }
+9 −0
Original line number Original line Diff line number Diff line
@@ -572,6 +572,15 @@ EGLBoolean eglDestroySurface(EGLDisplay dpy, EGLSurface surface)
        return setError(EGL_BAD_SURFACE, EGL_FALSE);
        return setError(EGL_BAD_SURFACE, EGL_FALSE);


    egl_surface_t * const s = get_surface(surface);
    egl_surface_t * const s = get_surface(surface);
    ANativeWindow* window = s->win.get();
    if (window) {
        int result = native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL);
        if (result != OK) {
            ALOGE("eglDestroySurface: native_window_api_disconnect (win=%p) "
                  "failed (%#x)",
                  window, result);
        }
    }
    EGLBoolean result = s->cnx->egl.eglDestroySurface(dp->disp.dpy, s->surface);
    EGLBoolean result = s->cnx->egl.eglDestroySurface(dp->disp.dpy, s->surface);
    if (result == EGL_TRUE) {
    if (result == EGL_TRUE) {
        _s.terminate();
        _s.terminate();