Summary: | Crash after hiding Play Queue | ||
---|---|---|---|
Product: | [Applications] juk | Reporter: | Thomas McGuire <mcguire> |
Component: | general | Assignee: | Michael Pyne <mpyne> |
Status: | RESOLVED FIXED | ||
Severity: | crash | ||
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Compiled Sources | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
Thomas McGuire
2005-03-01 17:44:51 UTC
I get a crash with 3.5 branch r504903, but my backtrace is different (so I won't mark as NEW). Oh, at second look, perhaps it is the same. Here's the backtrace anyway: System configuration startup check disabled. [New LWP 100139] [Switching to LWP 100139] 0x2a5ba8db in nanosleep () from /lib/libc.so.6 #0 0x2a5ba8db in nanosleep () from /lib/libc.so.6 #1 0x2a5081a1 in _nanosleep () from /usr/lib/libpthread.so.2 #2 0x2a59e9ea in sleep () from /lib/libc.so.6 #3 0x2a4fe2af in sleep () from /usr/lib/libpthread.so.2 #4 0x29459f54 in KCrash::startDrKonqi (argv=0xbfbfd640, argc=17) at /home/phil/kdesrc/kdelibs/kdecore/kcrash.cpp:311 #5 0x29459c76 in KCrash::defaultCrashHandler (sig=11) at /home/phil/kdesrc/kdelibs/kdecore/kcrash.cpp:228 #6 0x2a503f08 in sigaction () from /usr/lib/libpthread.so.2 #7 0xbfbfff94 in ?? () #8 0x0000000b in ?? () #9 0x0816e1e4 in TrackSequenceManager::nextItem (this=0x81c6f20) at /home/phil/kdesrc/kdemultimedia/juk/tracksequencemanager.cpp:96 #10 0x0811dcba in Playlist::playNext (this=0x8642d98) at /home/phil/kdesrc/kdemultimedia/juk/playlist.cpp:491 #11 0x081366b8 in PlaylistCollection::playNext (this=0x8336c30) at /home/phil/kdesrc/kdemultimedia/juk/playlistcollection.cpp:130 #12 0x08117f0d in PlayerManager::play (this=0x81c6d20, file=@0x81c5538) at /home/phil/kdesrc/kdemultimedia/juk/playermanager.cpp:285 #13 0x081182dd in PlayerManager::play (this=0x81c6d20) at /home/phil/kdesrc/kdemultimedia/juk/playermanager.cpp:331 #14 0x08119a6c in PlayerManager::qt_invoke (this=0x81c6d20, _id=4, _o=0xbfbfdcd0) at playermanager.moc:181 #15 0x29896ab0 in QObject::activate_signal () from /usr/X11R6/lib/libqt-mt.so.3 #16 0x29897121 in QObject::activate_signal () from /usr/X11R6/lib/libqt-mt.so.3 #17 0x290f903a in KAction::activated (this=0x82d41e0) at kaction.moc:176 #18 0x290f8661 in KAction::slotActivated (this=0x82d41e0) at /home/phil/kdesrc/kdelibs/kdeui/kaction.cpp:1102 #19 0x290f85fd in KAction::activate (this=0x82d41e0) at /home/phil/kdesrc/kdelibs/kdeui/kaction.cpp:1091 #20 0x08132657 in PlaylistBox::slotDoubleClicked (this=0x8336b90) at /home/phil/kdesrc/kdemultimedia/juk/playlistbox.cpp:644 #21 0x081341c4 in PlaylistBox::qt_invoke (this=0x8336b90, _id=110, _o=0xbfbfde20) at playlistbox.moc:155 #22 0x29896ab0 in QObject::activate_signal () from /usr/X11R6/lib/libqt-mt.so.3 #23 0x29ba508f in QListView::doubleClicked () from /usr/X11R6/lib/libqt-mt.so.3 #24 0x2912ee1e in KListView::contentsMouseDoubleClickEvent (this=0x8336b90, e=0xbfbfdee0) at /home/phil/kdesrc/kdelibs/kdeui/klistview.cpp:877 #25 0x299981c0 in QScrollView::viewportMouseDoubleClickEvent () from /usr/X11R6/lib/libqt-mt.so.3 #26 0x2999a1b6 in QScrollView::eventFilter () from /usr/X11R6/lib/libqt-mt.so.3 #27 0x2996cae8 in QListView::eventFilter () from /usr/X11R6/lib/libqt-mt.so.3 #28 0x2989400c in QObject::activate_filters () from /usr/X11R6/lib/libqt-mt.so.3 #29 0x298940d2 in QObject::event () from /usr/X11R6/lib/libqt-mt.so.3 #30 0x298c92b2 in QWidget::event () from /usr/X11R6/lib/libqt-mt.so.3 #31 0x2983b039 in QApplication::internalNotify () from /usr/X11R6/lib/libqt-mt.so.3 #32 0x2983b2e5 in QApplication::notify () from /usr/X11R6/lib/libqt-mt.so.3 #33 0x293c5677 in KApplication::notify (this=0xbfbfe8a0, receiver=0x83325d0, event=0xbfbfe3d0) at /home/phil/kdesrc/kdelibs/kdecore/kapplication.cpp:550 #34 0x297dcd1b in QETWidget::translateMouseEvent () from /usr/X11R6/lib/libqt-mt.so.3 #35 0x297dbc9b in QApplication::x11ProcessEvent () from /usr/X11R6/lib/libqt-mt.so.3 #36 0x297ed3c4 in QEventLoop::processEvents () from /usr/X11R6/lib/libqt-mt.so.3 #37 0x2984f493 in QEventLoop::enterLoop () from /usr/X11R6/lib/libqt-mt.so.3 #38 0x2984f3ec in QEventLoop::exec () from /usr/X11R6/lib/libqt-mt.so.3 #39 0x2983a374 in QApplication::exec () from /usr/X11R6/lib/libqt-mt.so.3 #40 0x08110add in main (argc=7, argv=0xbfbfea10) at /home/phil/kdesrc/kdemultimedia/juk/main.cpp:95 Confirmed in KDE 3.5 branch. I will try to investigate and fix. I'm surprised I didn't notice this bug report sooner, the steps to reproduce were exactly what was required, outstanding bug report. :) SVN commit 510372 by mpyne: Fix bug 100564 (Crash after hiding Play Queue) in JuK. Some of the involved code was of dubious design. Unfortunately, I was the one who wrote it. =D. The problem was that JuK uses a class to handle choosing the next playlist item, which is independant of the playlist code (a separate class). But when using the Play Queue, those functions are combined using two special classes for that purpose. When de-selecting the Play Queue, if an item wasn't already playing, I forgot to re-install the default track selector class, and now there was a split where none was expected, and things degenerated from there. CC'ing Carsten again for changelog update, please. BUG:100564 CCMAIL:cniehaus@gmx.de M +18 -6 upcomingplaylist.cpp M +1 -1 upcomingplaylist.h --- branches/KDE/3.5/kdemultimedia/juk/upcomingplaylist.cpp #510371:510372 @@ -44,6 +44,8 @@ void UpcomingPlaylist::initialize() { + // Prevent duplicate initialization. + if(m_active) return; @@ -126,16 +128,26 @@ if(!m_active) return; - m_active = false; + m_active = false; // Allow re-initialization. - if(!m_oldIterator || !playingItem()) + if(!m_oldIterator) return; + // Install the old track iterator. + + manager()->installIterator(m_oldIterator); + + // If we have an item that is currently playing, allow it to keep playing. + // Otherwise, just reset to the default iterator (probably not playing + // anything.) + // XXX: Reset to the last playing playlist? + m_oldIterator->reset(); - m_oldIterator->setCurrent(playingItem()->collectionItem()); - manager()->installIterator(m_oldIterator); - manager()->nextItem(); - setPlaying(manager()->nextItem(), true); + if(playingItem()) + m_oldIterator->setCurrent(playingItem()->collectionItem()); + + setPlaying(manager()->currentItem(), true); + Watched::currentChanged(); } --- branches/KDE/3.5/kdemultimedia/juk/upcomingplaylist.h #510371:510372 @@ -195,7 +195,7 @@ virtual void reset(); /** - * This function readys the UpcomingSequenceIterator for playback, by + * This function readies the UpcomingSequenceIterator for playback, by * making sure the parent UpcomingPlaylist has items to play if it is * empty. */ |