Bug 321838 - Dolphin is unresponsive for a second or two on startup
Summary: Dolphin is unresponsive for a second or two on startup
Status: RESOLVED FIXED
Alias: None
Product: nepomuk
Classification: Miscellaneous
Component: widgets - FileMetadataWidget (show other bugs)
Version: 4.10.80
Platform: Other Linux
: NOR normal
Target Milestone: ---
Assignee: Nepomuk Bugs Coordination
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-07-01 20:19 UTC by Kai Uwe Broulik
Modified: 2013-07-07 22:19 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Kai Uwe Broulik 2013-07-01 20:19:35 UTC
Since 4.11 when I launch Dolphin, the window appears and is completely drawn (all the icons and controls are there except for previews which build up afterwards and the information panel on the right), responds for a fraction of a second (eg. if you repeatedly press F4 after you clicked the Dolphin shortcut, it will come up with the Konsole opened) and then is unresponsive for a second or two.

Launch Dolphin:
Dolphin window appears
One event cycle is processed
Dolphin freezes for almost 2 seconds
Previews are built
Dolphin continues to work normally after that

Reproducible: Always
Comment 1 Frank Reininghaus 2013-07-01 21:06:42 UTC
Thanks for the bug report, but I cannot reproduce the problem. Please run Dolphin in gdb, stop it using Ctrl+Z while it's frozen, and provide a backtrace.

It would also be interesting which view mode you use, what the folder contents are sorted by, and how many folders/files are in places where you can reproduce this problem.
Comment 2 Emmanuel Pescosta 2013-07-01 23:24:21 UTC
I can reproduce this problem with enabled tooltips or with a visible information panel. The freeze happenes somewhere in nepomuk-widgets/nepomuk-core. (FileMetaDataWidget calls userVisibleRoles which blocks Dolphin)
Comment 3 Frank Reininghaus 2013-07-02 06:09:00 UTC
Thanks Emmanuel for testing it. I guess we should reassign to Nepomuk then. However, I still think that a backtrace would be helpful (I cannot test it myself because I'm currently at the machine where I build kde-baseapps master on top of kdelibs 4.10 with some hacks).
Comment 4 Vishesh Handa 2013-07-02 09:29:11 UTC
Could you please provide be a backtrace? You'll have to gdb into dolphin when it is frozen.

gdb --pid DolphinPID
> thread apply all backtrace
Comment 5 Emmanuel Pescosta 2013-07-02 12:13:09 UTC
Here is the backtrace: (Compiled kdelibs, nepomuk-core, nepomuk-widgets and kde-baseapps from git master)

(gdb) thread apply all backtrace
                                                                                                                                                                                                                     
Thread 3 (Thread 0x7fffd3df2700 (LWP 30849)):                                                                                                                                                                        
#0  0x00007ffff1d6b08d in poll () from /usr/lib/libc.so.6                                                                                                                                                            
#1  0x00007fffed3e9094 in ?? () from /usr/lib/libglib-2.0.so.0                                                                                                                                                       
#2  0x00007fffed3e919c in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0                                                                                                                                 
#3  0x00007ffff2e918f6 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4                                                                                 
#4  0x00007ffff2e6396f in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4                                                                                           
#5  0x00007ffff2e63c65 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4                                                                                                    
#6  0x00007ffff2d6267f in QThread::exec() () from /usr/lib/libQtCore.so.4                                                                                                                                            
#7  0x00007ffff2e45113 in ?? () from /usr/lib/libQtCore.so.4                                                                                                                                                         
#8  0x00007ffff2d64d1f in ?? () from /usr/lib/libQtCore.so.4                                                                                                                                                         
#9  0x00007ffff2ad5dd2 in start_thread () from /usr/lib/libpthread.so.0                                                                                                                                              
#10 0x00007ffff1d73cdd in clone () from /usr/lib/libc.so.6                                                                                                                                                           
                                                                                                                                                                                                                     
Thread 2 (Thread 0x7fffd8c35700 (LWP 30846)):                                                                                                                                                                        
#0  0x00007ffff1d6cd03 in select () from /usr/lib/libc.so.6                                                                                                                                                          
#1  0x00007ffff2e41ed3 in ?? () from /usr/lib/libQtCore.so.4                                                                                                                                                         
#2  0x00007ffff2d64d1f in ?? () from /usr/lib/libQtCore.so.4                                                                                                                                                         
#3  0x00007ffff2ad5dd2 in start_thread () from /usr/lib/libpthread.so.0                                                                                                                                              
#4  0x00007ffff1d73cdd in clone () from /usr/lib/libc.so.6                                                                                                                                                           

Thread 1 (Thread 0x7ffff7f7e7c0 (LWP 30838)):
#0  0x00007ffff1d6cd03 in select () from /usr/lib/libc.so.6
#1  0x00007fffd810c6e1 in ?? () from /usr/lib64/virtodbc_r.so
#2  0x00007fffd8111451 in ?? () from /usr/lib64/virtodbc_r.so
#3  0x00007fffd80dd7cd in ?? () from /usr/lib64/virtodbc_r.so
#4  0x00007fffd80e1835 in ?? () from /usr/lib64/virtodbc_r.so
#5  0x00007fffd8c4c5e4 in ?? () from /usr/lib/libiodbc.so.2
#6  0x00007fffd8c4c914 in SQLExecDirect () from /usr/lib/libiodbc.so.2
#7  0x00007fffd8eaa257 in ?? () from /usr/lib/soprano/libsoprano_virtuosobackend.so
#8  0x00007fffd8eaa580 in ?? () from /usr/lib/soprano/libsoprano_virtuosobackend.so
#9  0x00007fffd8e94e72 in ?? () from /usr/lib/soprano/libsoprano_virtuosobackend.so
#10 0x00007fffd8e95211 in ?? () from /usr/lib/soprano/libsoprano_virtuosobackend.so
#11 0x00007fffd8e953d8 in ?? () from /usr/lib/soprano/libsoprano_virtuosobackend.so
#12 0x00007ffff6458dc6 in Nepomuk2::MainModel::executeQuery (this=this@entry=0x8b8770, query=..., language=language@entry=Soprano::Query::QueryLanguageSparql, userQueryLanguage=...)
    at /home/emmanuel/kde-devel/src/nepomuk-core/libnepomukcore/resource/nepomukmainmodel.cpp:210
#13 0x00007ffff6460a03 in Nepomuk2::Types::EntityPrivate::load (this=0x12203d0) at /home/emmanuel/kde-devel/src/nepomuk-core/libnepomukcore/types/entity.cpp:76
#14 0x00007ffff64601b8 in Nepomuk2::Types::EntityPrivate::init (this=0x12203d0) at /home/emmanuel/kde-devel/src/nepomuk-core/libnepomukcore/types/entity.cpp:51
#15 0x00007ffff6460476 in Nepomuk2::Types::Entity::userVisible (this=this@entry=0x7fffffffd8d0) at /home/emmanuel/kde-devel/src/nepomuk-core/libnepomukcore/types/entity.cpp:293
#16 0x00007ffff673d02b in Nepomuk2::MetadataFilter::filter (this=<optimized out>, data=...) at /home/emmanuel/kde-devel/src/nepomuk-widgets/ui/metadatafilter.cpp:167
#17 0x00007ffff6732258 in Nepomuk2::FileMetaDataWidget::Private::slotLoadingFinished (this=0xf6e400) at /home/emmanuel/kde-devel/src/nepomuk-widgets/ui/filemetadatawidget.cpp:145
#18 0x00007ffff2e788ec in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/libQtCore.so.4
#19 0x00007ffff6735260 in Nepomuk2::FileMetaDataProvider::loadingFinished (this=<optimized out>) at /home/emmanuel/kde-devel/build/nepomuk-widgets/filemetadataprovider_p.moc:109
#20 0x00007ffff6736a39 in Nepomuk2::FileMetaDataProvider::Private::slotLoadingFinished (this=0xde9270, loader=0x0) at /home/emmanuel/kde-devel/src/nepomuk-widgets/ui/filemetadataprovider.cpp:251
#21 0x00007ffff2e788ec in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/libQtCore.so.4
#22 0x00007ffff6728fef in Nepomuk2::ResourceLoader::finished (this=<optimized out>, _t1=0x138df70) at /home/emmanuel/kde-devel/build/nepomuk-widgets/moc_resourceloader.cpp:103
#23 0x00007ffff2e7cc5e in QObject::event(QEvent*) () from /usr/lib/libQtCore.so.4
#24 0x00007ffff3fd80ac in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4
#25 0x00007ffff3fde670 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4
#26 0x00007ffff4cec7b6 in KApplication::notify (this=0x7fffffffe4b0, receiver=0x138df70, event=0x7fffc401c310) at /home/emmanuel/kde-devel/src/kdelibs/kdeui/kernel/kapplication.cpp:311
#27 0x00007ffff2e64c3d in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQtCore.so.4
#28 0x00007ffff2e67c8f in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/libQtCore.so.4
#29 0x00007ffff2e91ef3 in ?? () from /usr/lib/libQtCore.so.4
#30 0x00007fffed3e8da6 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#31 0x00007fffed3e90f8 in ?? () from /usr/lib/libglib-2.0.so.0
---Type <return> to continue, or q <return> to quit---
#32 0x00007fffed3e919c in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#33 0x00007ffff2e918d5 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#34 0x00007ffff4075066 in ?? () from /usr/lib/libQtGui.so.4
#35 0x00007ffff2e6396f in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#36 0x00007ffff2e63c65 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#37 0x00007ffff2e68ccb in QCoreApplication::exec() () from /usr/lib/libQtCore.so.4
#38 0x00007ffff7b6eb2a in kdemain (argc=1, argv=0x7fffffffe5e8) at /home/emmanuel/kde-devel/src/kde-baseapps/dolphin/src/main.cpp:93
#39 0x00007ffff1cafa15 in __libc_start_main () from /usr/lib/libc.so.6
#40 0x0000000000400891 in _start ()
Comment 6 Vishesh Handa 2013-07-07 22:19:06 UTC
Git commit 376b6de7916138f75c8c08b4fdfc1a6fbf26102d by Vishesh Handa.
Committed on 07/07/2013 at 22:08.
Pushed by vhanda into branch 'master'.

ResourceLoader: Load all the associated properties as well

When using the FileMetadataWidget, the MetadatFilter class is used which
internally uses Types::Property. This Property class is unfortunately
synchronous and can block for a bit. Therefore we load all the
properties in this separate thread so that they are always there in the
cache.

This never used to be a problem earlier because connecting to the
Nepomuk Server used to be quite fast. Since now we connect directly to
virtuoso, it can take some time and block.

M  +8    -1    ui/resourceloader.cpp

http://commits.kde.org/nepomuk-widgets/376b6de7916138f75c8c08b4fdfc1a6fbf26102d