[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [plasma-desktop/Plasma/5.6] kcms/touchpad/src/backends/x11: Avoid dead loop for xcb_poll_for_reply i
From:       Weng Xuetian <wengxt () gmail ! com>
Date:       2016-03-29 22:35:11
Message-ID: E1al2EB-000844-GP () scm ! kde ! org
[Download RAW message or body]

Git commit afd38b228960c2f5bf9a810237e04b875447301c by Weng Xuetian.
Committed on 29/03/2016 at 22:34.
Pushed by xuetianweng into branch 'Plasma/5.6'.

Avoid dead loop for xcb_poll_for_reply if xcb connection is dead.

Check the returned error and break if error happens.

M  +5    -3    kcms/touchpad/src/backends/x11/xlibbackend.cpp
M  +7    -1    kcms/touchpad/src/backends/x11/xrecordkeyboardmonitor.cpp

http://commits.kde.org/plasma-desktop/afd38b228960c2f5bf9a810237e04b875447301c

diff --git a/kcms/touchpad/src/backends/x11/xlibbackend.cpp \
b/kcms/touchpad/src/backends/x11/xlibbackend.cpp index 8dedcc8..347dc07 100644
--- a/kcms/touchpad/src/backends/x11/xlibbackend.cpp
+++ b/kcms/touchpad/src/backends/x11/xlibbackend.cpp
@@ -60,9 +60,11 @@ void XlibBackend::XDisplayCleanup::cleanup(Display *p)
 
 XlibBackend* XlibBackend::initialize(QObject *parent)
 {
-    XlibBackend* backend = nullptr;
-
-    backend = new XlibBackend(parent);
+    XlibBackend* backend = new XlibBackend(parent);
+    if (!backend->m_display) {
+        delete backend;
+        return nullptr;
+    }
     return backend;
 }
 
diff --git a/kcms/touchpad/src/backends/x11/xrecordkeyboardmonitor.cpp \
b/kcms/touchpad/src/backends/x11/xrecordkeyboardmonitor.cpp index 1dceee2..0884dad \
                100644
--- a/kcms/touchpad/src/backends/x11/xrecordkeyboardmonitor.cpp
+++ b/kcms/touchpad/src/backends/x11/xrecordkeyboardmonitor.cpp
@@ -94,7 +94,13 @@ void XRecordKeyboardMonitor::processNextReply()
     }
 
     void *reply = 0;
-    while (xcb_poll_for_reply(m_connection, m_cookie.sequence, &reply, 0)) {
+    xcb_generic_error_t *error = nullptr;
+    while (m_cookie.sequence && xcb_poll_for_reply(m_connection, m_cookie.sequence, \
&reply, &error)) { +        if (error) {
+            std::free(error);
+            break;
+        }
+
         if (!reply) {
             continue;
         }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic