[Bug 1290514] Re: LibreOffice KDE4 backend crashes in Qt4 recursive paint events

Jonathan Riddell jriddell at ubuntu.com
Wed Mar 19 10:23:03 UTC 2014


** Description changed:

  Distribution: Kubuntu 12.04
- Package: qt4-x11 4:4.8.1-0ubuntu4.6 
+ Package: qt4-x11 4:4.8.1-0ubuntu4.6
  Program: LibreOffice 4.3 (current master build).
  
  This bugs origin is a crash when using KDE4 native file picker dialogs
  from within LibreOffice [1].
  
  There are several similar ones in all distributions.
  
  In the backtrace you can see, that LO calls the Qt event dispatcher,
  which processes a draw event, which - at some point - waits for the
  clipboard using the Qt / LO event loop, which processes another (now
  nested) draw event -> crash.
  
  This happens, because LO sets
-   qApp->clipboard()->setProperty( "useEventLoopWhenWaiting", true );
+   qApp->clipboard()->setProperty( "useEventLoopWhenWaiting", true );
  because the X11 event processing in clipboardWaitForEvents would interfere with the LO X11 handling / locking.
  
  QX11Data::clipboardWaitForEvents (gui/kernel/qclipboard_x11.cpp:520)
  actually installs the correct clipboard event filter in the qapp, which
  should just handle Clipboard events.
  
  But actually the Qt internal glib event loop doesn't honor the
  QEventLoop::ExcludeSocketNotifiers (see
  src/corelib/kernel/qeventdispatcher_glib.cpp).
  
  Originally I opened [2], because I didn't want to deep dive into the Qt
  codebase. Since I didn't get any usable replies and all my implemented
  workarounds in LibreOffice didn't work I tried to understand the
  backtrace from [2] and realized the missing
  QEventLoop::ExcludeSocketNotifiers handling in the Qt glib code. I
  opened [3] and pushed a patch for Qt review as [4].
  
  [1] https://bugs.freedesktop.org/show_bug.cgi?id=69002
  [2] https://bugreports.qt-project.org/browse/QTBUG-34614
  [3] https://bugreports.qt-project.org/browse/QTBUG-37380
  [4] https://codereview.qt-project.org/#change,80528
+ 
+ [IMPACT]
+ The patch fixes the glib event loop to pass a currently failing testcase in the Qt4 library (processEventsExcludeSocket in tests/auto/qeventloop/tst_qeventloop.cpp). The flag was never handled in the glib eventloop.
+ 
+ [TEST CASE]
+ LibreOffice uses a very rarely used Qt codepath to poll the X11 clipboard (using the event loop), which needs this patch. Otherwise it crashes very often with the KDE 4 backend when polling the clipboard. There is no other codepath.
+ Test by using LibreOffice with the KDE theme until it crashes.  After the patch is applied it will no longer crash.
+ 
+ [REGRESSION POTENTIAL]
+ I can't imagine a program out there which relies on this brokeness.
+ If the patch was really broken to invert the behaviour, the impact would be immediately visible, as no socket events would be processed, including X11 events.

-- 
You received this bug notification because you are a member of Kubuntu
Bugs, which is subscribed to qt4-x11 in Ubuntu.
https://bugs.launchpad.net/bugs/1290514

Title:
  LibreOffice KDE4 backend crashes in Qt4 recursive paint events

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/qt4-x11/+bug/1290514/+subscriptions




More information about the kubuntu-bugs mailing list