Bug 422522 - konqueror: when preload is activated, konqueror doesn't quit and it's restored as blank window on next login
Summary: konqueror: when preload is activated, konqueror doesn't quit and it's restore...
Status: REPORTED
Alias: None
Product: konqueror
Classification: Applications
Component: general (show other bugs)
Version: 5.0.97
Platform: Gentoo Packages Linux
: NOR normal
Target Milestone: ---
Assignee: Konqueror Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-06-06 08:01 UTC by i.Dark_Templar
Modified: 2021-01-30 17:19 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments
konqueror-quit.log (226.94 KB, text/x-log)
2020-06-06 08:01 UTC, i.Dark_Templar
Details

Note You need to log in before you can comment on or make changes to this bug.
Description i.Dark_Templar 2020-06-06 08:01:57 UTC
Created attachment 129098 [details]
konqueror-quit.log

SUMMARY
If "preload" option is active, which is a default setting AFAIK, and user session is configured to restore previous session on login, on login konqueror window might be unexpectedly restored if last time konqueror was used and closed. Reproduced on Linux/X11 with KDE desktop.

STEPS TO REPRODUCE
1. go to "system settings" -> "Startup and Shutdown" -> "Desktop Session" -> select to "Restore previous session" on login and apply.
2. run "konqueror", go to menu "Settings" -> "Configure Konqueror..." -> "Performance", ensure that "Preload an instance after desktop startup" is unchecked while "Always try to have one preloaded instance" is checked.
3. If "Always try to have one preloaded instance" wasn't checked, it might be necessary to close and reopen konqueror.
4. Close konqueror.
5. Logout of desktop session
6. Login back to same session, restoring last session

OBSERVED RESULT
On login, konqueror with blank window is restored. Since all konqueror windows were closed, it's unexpected to have it restored. Furthermore, between steps 4 and 5, after konqueror window is closed, konqueror process doesn't quit and continues to exist.

EXPECTED RESULT
Either konqueror must quit when last window is closed, or it must not be restored when saved session is restored if no konqueror windows were visible in last session, or such restored windows must be invisible when restored too.

SOFTWARE/OS VERSIONS
Linux/KDE Plasma: 
(available in About System)
KDE Plasma Version: 19.12.3
KDE Frameworks Version: 5.70.0
Qt Version: 5.14.2

ADDITIONAL INFORMATION
It looks like unsetting "Preload an instance after desktop startup" prevents issue from appearing.

Attached file contains part of gdb output for watching QCoreApplicationPrivate::quitLockRef from start of konqueror till last window is closed. Application didn't quit since one QEventLoopLockerPrivate wasn't destroyed with last window. After tracking creation and destruction of each QEventLoopLockerPrivate instance, it turned out it was an instance of KonqMainWindow created by preload with following backtrace:

#0  0x00007ffff5bdb4b4 in QCoreApplicationPrivate::ref (this=this@entry=0x5555555774b0) at /usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include/g++-v9/bits/atomic_base.h:318
#1  0x00007ffff5bd9d94 in QEventLoopLockerPrivate::QEventLoopLockerPrivate (app=0x5555555774b0, this=0x555555dde3f0)
    at /var/tmp/portage/dev-qt/qtcore-5.14.2/work/qtbase-everywhere-src-5.14.2/src/corelib/kernel/qeventloop.cpp:367
#2  QEventLoopLocker::QEventLoopLocker (this=0x555555cffaa8)
    at /var/tmp/portage/dev-qt/qtcore-5.14.2/work/qtbase-everywhere-src-5.14.2/src/corelib/kernel/qeventloop.cpp:428
#3  0x00007ffff73689de in KMainWindowPrivate::KMainWindowPrivate (this=0x555555cffa40) at /usr/include/qt5/QtCore/qarraydata.h:257
#4  KXmlGuiWindowPrivate::KXmlGuiWindowPrivate (this=0x555555cffa40) at /var/tmp/portage/kde-frameworks/kxmlgui-5.70.0/work/kxmlgui-5.70.0/src/kxmlguiwindow.cpp:62
#5  KXmlGuiWindow::KXmlGuiWindow (this=0x555555d17c70, __vtt_parm=0x7ffff7f74730 <VTT for KonqMainWindow+16>, parent=0x0, f=..., __in_chrg=<optimized out>)
    at /var/tmp/portage/kde-frameworks/kxmlgui-5.70.0/work/kxmlgui-5.70.0/src/kxmlguiwindow.cpp:83
#6  0x00007ffff79430e5 in KParts::MainWindow::MainWindow (this=0x555555d17c70, __vtt_parm=0x7ffff7f74728 <VTT for KonqMainWindow+8>, parent=<optimized out>, f=...,
    __in_chrg=<optimized out>) at /var/tmp/portage/kde-frameworks/kparts-5.70.0/work/kparts-5.70.0/src/mainwindow.cpp:67
#7  0x00007ffff7f0f3bd in KonqMainWindow::KonqMainWindow (this=0x555555d17c70, initialURL=..., __in_chrg=<optimized out>, __vtt_parm=<optimized out>)
    at /usr/include/qt5/QtCore/qflags.h:119
#8  0x00007ffff7f18823 in <lambda()>::operator() (__closure=<optimized out>)
    at /var/tmp/portage/kde-apps/konqueror-19.12.3/work/konqueror-19.12.3/src/konqmainwindowfactory.cpp:49
#9  QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, ensurePreloadedWindow()::<lambda()> >::call (f=..., arg=<optimized out>)
    at /usr/include/qt5/QtCore/qobjectdefs_impl.h:146
#10 QtPrivate::Functor<ensurePreloadedWindow()::<lambda()>, 0>::call<QtPrivate::List<>, void> (f=..., arg=<optimized out>)
    at /usr/include/qt5/QtCore/qobjectdefs_impl.h:256
#11 QtPrivate::QFunctorSlotObject<ensurePreloadedWindow()::<lambda()>, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (
    which=<optimized out>, this_=<optimized out>, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:443
#12 0x00007ffff5c11802 in QtPrivate::QSlotObjectBase::call (a=0x7fffffffd270, r=<optimized out>, this=<optimized out>)
    at /var/tmp/portage/dev-qt/qtcore-5.14.2/work/qtbase-everywhere-src-5.14.2/include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#13 QSingleShotTimer::timerEvent (this=0x555555f05a90) at /var/tmp/portage/dev-qt/qtcore-5.14.2/work/qtbase-everywhere-src-5.14.2/src/corelib/kernel/qtimer.cpp:320
#14 0x00007ffff5c06755 in QObject::event (this=0x555555f05a90, e=0x7fffffffd700)
    at /var/tmp/portage/dev-qt/qtcore-5.14.2/work/qtbase-everywhere-src-5.14.2/src/corelib/kernel/qobject.cpp:1361
#15 0x00007ffff683acce in QApplicationPrivate::notify_helper (this=0x5555555774b0, receiver=0x555555f05a90, e=0x7fffffffd700)
    at /var/tmp/portage/dev-qt/qtwidgets-5.14.2/work/qtbase-everywhere-src-5.14.2/src/widgets/kernel/qapplication.cpp:3685
#16 0x00007ffff6837fdf in QApplication::notify (this=0x7fffffffda20, receiver=0x555555f05a90, e=0x7fffffffd700)
    at /var/tmp/portage/dev-qt/qtwidgets-5.14.2/work/qtbase-everywhere-src-5.14.2/src/widgets/kernel/qapplication.cpp:3025
#17 0x00007ffff5bdb16f in QCoreApplication::notifyInternal2 (receiver=0x555555f05a90, event=0x7fffffffd700)
    at /var/tmp/portage/dev-qt/qtcore-5.14.2/work/qtbase-everywhere-src-5.14.2/src/corelib/kernel/qcoreapplication.cpp:1075
#18 0x00007ffff5c2e7cb in QTimerInfoList::activateTimers (this=0x5555555d9700)
    at /var/tmp/portage/dev-qt/qtcore-5.14.2/work/qtbase-everywhere-src-5.14.2/src/corelib/kernel/qtimerinfo_unix.cpp:643
#19 0x00007ffff5c2f064 in timerSourceDispatch (source=<optimized out>)
    at /var/tmp/portage/dev-qt/qtcore-5.14.2/work/qtbase-everywhere-src-5.14.2/src/corelib/kernel/qeventdispatcher_glib.cpp:183
#20 0x00007ffff37fb307 in g_main_context_dispatch () from /usr/lib64/libglib-2.0.so.0
#21 0x00007ffff37fb590 in ?? () from /usr/lib64/libglib-2.0.so.0
#22 0x00007ffff37fb61f in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
#23 0x00007ffff5c2f4ed in QEventDispatcherGlib::processEvents (this=0x5555555e0550, flags=...)
    at /var/tmp/portage/dev-qt/qtcore-5.14.2/work/qtbase-everywhere-src-5.14.2/src/corelib/kernel/qeventdispatcher_glib.cpp:423
#24 0x00007ffff5bda00b in QEventLoop::exec (this=this@entry=0x7fffffffd940, flags=..., flags@entry=...)
    at /var/tmp/portage/dev-qt/qtcore-5.14.2/work/qtbase-everywhere-src-5.14.2/include/QtCore/../../src/corelib/global/qflags.h:136
#25 0x00007ffff5be1dd2 in QCoreApplication::exec ()
    at /var/tmp/portage/dev-qt/qtcore-5.14.2/work/qtbase-everywhere-src-5.14.2/include/QtCore/../../src/corelib/global/qflags.h:118
#26 0x00007ffff6837841 in QApplication::exec () at /var/tmp/portage/dev-qt/qtwidgets-5.14.2/work/qtbase-everywhere-src-5.14.2/src/widgets/kernel/qapplication.cpp:2825
#27 0x00007ffff7f3cd69 in kdemain (argc=<optimized out>, argv=<optimized out>) at /var/tmp/portage/kde-apps/konqueror-19.12.3/work/konqueror-19.12.3/src/konqmain.cpp:274
#28 0x00007ffff7ccee1b in __libc_start_main (main=0x555555555050 <main>, argc=1, argv=0x7fffffffdb98, init=<optimized out>, fini=<optimized out>,
    rtld_fini=<optimized out>, stack_end=0x7fffffffdb88) at ../csu/libc-start.c:308
#29 0x000055555555508a in _start ()
Comment 1 Christoph Feck 2020-07-03 19:49:33 UTC
Could you please check if the commit for bug 388333 also fixes this issue? You need Konqueror version 20.04.1 (which is unrelated to Plasma version).
Comment 2 i.Dark_Templar 2020-07-04 05:49:55 UTC
(In reply to Christoph Feck from comment #1)
> Could you please check if the commit for bug 388333 also fixes this issue?
> You need Konqueror version 20.04.1 (which is unrelated to Plasma version).

I've updated to konqueror 20.04.2, which includes mentioned fix AFAIK, and it didn't fix this issue for me.