diff --git a/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandglcontext.cpp b/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandglcontext.cpp
index f2671ae2fbd75b309d3fe9edfc233983e4a921ef..e0af14ae5de8195b1a487cbfdc50ec65c1343323 100644
--- a/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandglcontext.cpp
+++ b/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandglcontext.cpp
@@ -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);
 }
diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp
index b1b1d33571ee85b46a12d24a2ab53b0a8568ad08..bf21e0b46db5890e7c4fab2dbbd2784c989a6703 100644
--- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp
+++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp
@@ -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()