[okular] [Bug 426698] Okular crashes starting with 2 differently orientated screens

David Hurka bugzilla_noreply at kde.org
Thu Oct 8 23:27:53 BST 2020


https://bugs.kde.org/show_bug.cgi?id=426698

--- Comment #9 from David Hurka <david.hurka at mailbox.org> ---
>From qscroller.cpp, I can tell:

prepareScrolling() is called with QPointF().
setDpiFromWidget() is called with `target`, i. e. our PageView widget.

> void QScrollerPrivate::setDpiFromWidget(QWidget *widget)
> {
>     const QScreen *screen = widget ? widget->screen() : QGuiApplication::primaryScreen();
>     Q_ASSERT(screen);
>     setDpi(QPointF(screen->physicalDotsPerInchX(), screen->physicalDotsPerInchY()));
> }

This means either widget->screen() or QGuiApplication::primaryScreen() must
have returned 0x200000000. From reading QWidget code, I have no idea where that
could have happened. There appears to be a QTLWExtra object with a window
member of type QWidgetWindow*, and that must have been written with
0x20x200000000 probably...

This is my backtrace when I break on setDpiFromWidget():

> Thread 1 "okular" hit Breakpoint 2, QScrollerPrivate::setDpiFromWidget (this=this at entry=0x555555868680, widget=0x5555557c5750) at util/qscroller.cpp:1033
> 1033    in util/qscroller.cpp
> (gdb) bt
> #0  QScrollerPrivate::setDpiFromWidget (this=this at entry=0x555555868680, widget=0x5555557c5750) at util/qscroller.cpp:1033
> #1  0x00007ffff760cbcc in QScrollerPrivate::prepareScrolling (this=this at entry=0x555555868680, position=...) at util/qscroller.cpp:1431
> #2  0x00007ffff760e0bf in QScroller::scrollTo (this=0x55555582d210, pos=..., scrollTime=0) at ../../include/QtCore/../../src/corelib/tools/qpoint.h:289
> #3  0x00007ffff03971e3 in PageView::scrollTo (this=0x5555558491b0, x=-1, y=21, smoothMove=false) at ../ui/pageview.cpp:4018
> #4  0x00007ffff03970a6 in PageView::center (this=0x5555558491b0, cx=620, cy=380, smoothMove=false) at ../ui/pageview.cpp:4002
> #5  0x00007ffff0399352 in PageView::slotRelayoutPages (this=0x5555558491b0) at ../ui/pageview.cpp:4307
> #6  0x00007ffff029a1c5 in PageView::qt_static_metacall (_o=0x5555558491b0, _c=QMetaObject::InvokeMetaMethod, _id=17, _a=0x55555603af18) at okularpart_autogen/UYX5XTB5RZ/moc_pageview.cpp:342
> #7  0x00007ffff66c9129 in QObject::event (this=this at entry=0x5555558491b0, e=e at entry=0x55555603aed0) at kernel/qobject.cpp:1314
> #8  0x00007ffff72b4d5d in QWidget::event (this=this at entry=0x5555558491b0, event=event at entry=0x55555603aed0) at kernel/qwidget.cpp:9088
> #9  0x00007ffff7365062 in QFrame::event (this=this at entry=0x5555558491b0, e=e at entry=0x55555603aed0) at widgets/qframe.cpp:550
> #10 0x00007ffff7367da9 in QAbstractScrollArea::event (this=0x5555558491b0, e=0x55555603aed0) at widgets/qabstractscrollarea.cpp:1042
> #11 0x00007ffff038770a in PageView::event (this=0x5555558491b0, event=0x55555603aed0) at ../ui/pageview.cpp:1543
> #12 0x00007ffff7271cc3 in QApplicationPrivate::notify_helper (this=this at entry=0x5555555abcd0, receiver=receiver at entry=0x5555558491b0, e=e at entry=0x55555603aed0) at kernel/qapplication.cpp:3671
> #13 0x00007ffff727ac70 in QApplication::notify (this=0x7fffffffdbe0, receiver=0x5555558491b0, e=0x55555603aed0) at kernel/qapplication.cpp:3417
> #14 0x00007ffff669b6aa in QCoreApplication::notifyInternal2 (receiver=0x5555558491b0, event=0x55555603aed0) at ../../include/QtCore/5.15.0/QtCore/private/../../../../../src/corelib/thread/qthread_p.h:325
> #15 0x00007ffff669dfa1 in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x5555555a2b20) at kernel/qcoreapplication.cpp:1815
> #16 0x00007ffff66f6837 in postEventSourceDispatch (s=0x555555613080) at kernel/qeventdispatcher_glib.cpp:277
> #17 0x00007ffff4d67fbd in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0                                                                            
> #18 0x00007ffff4d68240 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
> #19 0x00007ffff4d682e3 in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
> #20 0x00007ffff66f5e92 in QEventDispatcherGlib::processEvents (this=0x555555619bb0, flags=...) at kernel/qeventdispatcher_glib.cpp:423
> #21 0x00007ffff669a1bb in QEventLoop::exec (this=this at entry=0x7fffffffdb10, flags=..., flags at entry=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:141
> #22 0x00007ffff66a2354 in QCoreApplication::exec () at ../../include/QtCore/../../src/corelib/global/qflags.h:121
> #23 0x000055555556578a in main (argc=1, argv=0x7fffffffdd08) at ../shell/main.cpp:109

The delivered event is of type QEvent::MetaCall. The breakpoint triggered when
I launched Okular and then opened a document using “Open...”. It already shows
the “Loaded a 2-page document.” message in the corner.

Of course this breakpoint triggers more often, with every call to scrollTo().
But the other backtraces don’t say anything more (which I can see).

My conclusion is that this is probably a bug in Qt.

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the Okular-devel mailing list