Skip to content
Snippets Groups Projects
Commit 0a25184b authored by Andy Nichols's avatar Andy Nichols Committed by Jørgen Lind
Browse files

Remove hack that causes deadlock when waiting in eglSwapBuffers


This hack was added to work around the problem of calling
wl_display_iterate in two separate threads, but now that we are
are enforceing that wl_display_iterate can only be called in one thread
it now causes a deadlock when we are waiting in eglSwapBuffers for the
gui thread to actually call wl_display_iterate.

Change-Id: Id3153b184c191494838fc363380f7cae621ac64e
Reviewed-by: default avatarJørgen Lind <jorgen.lind@nokia.com>
parent 39aacb4d
No related branches found
No related tags found
No related merge requests found
......@@ -49,7 +49,6 @@
#include <QtGui/QPlatformOpenGLContext>
#include <QtGui/QSurfaceFormat>
#include <QtCore/QMutex>
QWaylandGLContext::QWaylandGLContext(EGLDisplay eglDisplay, const QSurfaceFormat &format, QPlatformOpenGLContext *share)
: QPlatformOpenGLContext()
......@@ -85,13 +84,8 @@ void QWaylandGLContext::doneCurrent()
eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
}
// lock to sync with QWaylandDisplay event loop ( defined in qwaylanddisplay.cpp )
extern QMutex g_waylandLock;
void QWaylandGLContext::swapBuffers(QPlatformSurface *surface)
{
QMutexLocker l(&g_waylandLock);
EGLSurface eglSurface = static_cast<QWaylandEglWindow *>(surface)->eglSurface();
eglSwapBuffers(m_eglDisplay, eglSurface);
}
......
......@@ -70,11 +70,6 @@
#include <stdio.h>
#include <errno.h>
#include <QMutex>
// lock used to syncronize swap-buffers with the display-event-loop
QMutex g_waylandLock;
#include <QtCore/QDebug>
struct wl_surface *QWaylandDisplay::createSurface(void *handle)
......@@ -184,32 +179,27 @@ void QWaylandDisplay::flushRequests()
void QWaylandDisplay::readEvents()
{
if (g_waylandLock.tryLock())
{
fd_set fds;
FD_ZERO(&fds);
FD_SET(mFd, &fds);
fd_set nds;
FD_ZERO(&nds);
fd_set rs = fds;
fd_set ws = nds;
fd_set es = nds;
timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 0;
int ret = ::select(mFd+1, &rs, &ws, &es, &timeout );
if (ret <= 0) {
g_waylandLock.unlock();
return;
}
wl_display_iterate(mDisplay, WL_DISPLAY_READABLE);
g_waylandLock.unlock();
fd_set fds;
FD_ZERO(&fds);
FD_SET(mFd, &fds);
fd_set nds;
FD_ZERO(&nds);
fd_set rs = fds;
fd_set ws = nds;
fd_set es = nds;
timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 0;
int ret = ::select(mFd+1, &rs, &ws, &es, &timeout );
if (ret <= 0) {
return;
}
wl_display_iterate(mDisplay, WL_DISPLAY_READABLE);
}
void QWaylandDisplay::blockingReadEvents()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment