← Back to team overview

touch-packages team mailing list archive

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

 

saucy has seen the end of its life and is no longer receiving any
updates. Marking the saucy task for this ticket as "Won't Fix".

** Changed in: qt4-x11 (Ubuntu Saucy)
       Status: Fix Committed => Won't Fix

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

Title:
  LibreOffice KDE4 backend crashes in Qt4 recursive paint events

Status in qt4-x11 package in Ubuntu:
  Fix Released
Status in qt4-x11 source package in Precise:
  Fix Committed
Status in qt4-x11 source package in Quantal:
  Won't Fix
Status in qt4-x11 source package in Saucy:
  Won't Fix
Status in qt4-x11 source package in Trusty:
  Fix Released

Bug description:
  Distribution: Kubuntu 12.04
  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 );
  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.

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