Bug 106038 - freeze when changing output method
Summary: freeze when changing output method
Status: RESOLVED FIXED
Alias: None
Product: juk
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Gentoo Packages Linux
: NOR normal
Target Milestone: ---
Assignee: Scott Wheeler
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-05-20 21:53 UTC by Tim Hutt
Modified: 2005-09-20 18:51 UTC (History)
1 user (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 Tim Hutt 2005-05-20 21:53:37 UTC
Version:            (using KDE KDE 3.4.0)
Installed from:    Gentoo Packages
OS:                Linux

Hi,

Just compiled kdemultimedia 3.4, and juk freezes when you change the output method (arts, akode, gstreamer) more than once. If you kill/start it again and change to each method they all seem to work, just changing between them causes the crash.
Comment 1 Scott Wheeler 2005-06-15 15:37:28 UTC
Yeah, I've got the same here.  I'm not sure exactly why it happens, but it seems ugly.  The couple of times that I tried to catch it in gdb it seemed like a race condition or something of the sort.
Comment 2 Jure Repinc 2005-07-22 01:10:50 UTC
I have same problem here with KDE and Juk from SVN. This is what I get on AMD64 system after runing gdb, attach, where (if it is of any help at all):

#0  0x00002aaaae9bf354 in QGList::next (this=0x859f50) at qglist.cpp:869
#1  0x00002aaaae6b06c3 in QPtrList<TimerInfo>::next (this=0x859f50) at qptrlist.h:111
#2  0x00002aaaae6aef4f in insertTimer (ti=0x11b4040) at qeventloop_unix.cpp:178
#3  0x00002aaaae6af595 in qStartTimer (interval=50, obj=0x1ad1b60) at qeventloop_unix.cpp:301
#4  0x00002aaaae71bb0f in QObject::startTimer (this=0x1ad1b60, interval=50) at qobject.cpp:999
#5  0x00002aaaae740146 in QTimer::start (this=0x1ad1b60, msec=50, sshot=false) at qtimer.cpp:172
#6  0x00002aaaae22273d in QTimeWatch (this=0x1ad8920, milliseconds=50, notify=0x1a77cd0) at /home/kdedev/src/kde/arts/qtmcop/qiomanager.cc:89
#7  0x00002aaaae22331d in Arts::QIOManager::addTimer (this=0x859f50, milliseconds=50, notify=0x1a77cd0) at stl_list.h:785
#8  0x00002aaaae223636 in Arts::HandleNotificationsStartup::startup (this=0x2aaaae325ab0) at dispatcher.h:108
#9  0x00002aaab134e1dd in Arts::StartupManager::startup () at stl_list.h:131
#10 0x00002aaab1336022 in Dispatcher (this=0x1abe4c0, ioManager=0x1acea80, startServer=4293380336) at /home/kdedev/src/kde/arts/mcop/dispatcher.cc:221
#11 0x00002aaaac99c95c in KArtsDispatcher (this=0x2aaaacad1788, parent=0x11b4058, name=0x859f50 "ĐăÖŽŞ*")
    at /home/kdedev/src/kde/kdelibs/arts/kde/kartsdispatcher.cc:42
#12 0x000000000046f89a in ArtsPlayer::setupPlayer (this=0x1ac0560) at /home/kdedev/src/kde/kdemultimedia/juk/artsplayer.cpp:250
#13 0x000000000046f9a4 in ArtsPlayer (this=0x1ac0560) at /home/kdedev/src/kde/kdemultimedia/juk/artsplayer.cpp:53
#14 0x00000000004b2adb in createPlayer (system=8757072) at /home/kdedev/src/kde/kdemultimedia/juk/playermanager.cpp:72
#15 0x00000000004b37c2 in PlayerManager::setOutput (this=0x8777a0, system=@0x7fffffe7cb90) at /home/kdedev/src/kde/kdemultimedia/juk/playermanager.cpp:541
#16 0x00000000004b4375 in PlayerManager::setup (this=0x8777a0) at /home/kdedev/src/kde/kdemultimedia/juk/playermanager.cpp:626
#17 0x00000000004b51f5 in PlayerManager::qt_invoke (this=0x8777a0, _id=22, _o=0x7fffffe7cca0) at qucom_p.h:449
#18 0x00002aaaae71e074 in QObject::activate_signal (this=0x88a640, clist=0x9285d0, o=0x7fffffe7cca0) at qobject.cpp:2379
#19 0x00002aaaae71e614 in QObject::activate_signal (this=0x88a640, signal=6, param=
      {static null = {static null = <same as static member of an already seen type>, d = 0x6889e0, static shared_null = 0x6889e0}, d = 0x88ab40, static shared_null = 0x6889e0}) at qobject.cpp:2450
#20 0x00002aaaad167fc7 in KSelectAction::activated (this=0x88a640, t0=@0x11b4058) at qmetaobject.h:261
#21 0x00002aaaad16818a in KSelectAction::slotActivated (this=0x88a640) at /home/kdedev/src/kde/kdelibs/kdeui/kactionclasses.cpp:800
#22 0x00002aaaad16846f in KSelectAction::qt_invoke (this=0x88a640, _id=25, _o=0x7fffffe7cec0) at kactionclasses.moc:357
#23 0x00002aaaae71df3f in QObject::activate_signal (this=0x9145c0, clist=0xa28270, o=0x7fffffe7cec0) at qobject.cpp:2355
#24 0x00002aaaaea4080e in QSignal::signal (this=0x9145c0, t0=@0x914610) at moc_qsignal.cpp:100
#25 0x00002aaaae739857 in QSignal::activate (this=0x9145c0) at qsignal.cpp:212
#26 0x00002aaaae7404e8 in QSingleShotTimer::event (this=0x914570) at qtimer.cpp:286
#27 0x00002aaaae6c0a5c in QApplication::internalNotify (this=0x7fffffe7d650, receiver=0x914570, e=0x7fffffe7d270) at qapplication.cpp:2635
#28 0x00002aaaae6c0079 in QApplication::notify (this=0x7fffffe7d650, receiver=0x914570, e=0x7fffffe7d270) at qapplication.cpp:2358
#29 0x00002aaaad74cd61 in KApplication::notify (this=0x7fffffe7d650, receiver=0x914570, event=0x7fffffe7d270)
    at /home/kdedev/src/kde/kdelibs/kdecore/kapplication.cpp:549
#30 0x00002aaaae65655e in QApplication::sendEvent (receiver=0x914570, event=0x7fffffe7d270) at qapplication.h:491
#31 0x00002aaaae6b02fb in QEventLoop::activateTimers (this=0x7e62a0) at qeventloop_unix.cpp:556
#32 0x00002aaaae66931d in QEventLoop::processEvents (this=0x7e62a0, flags=4) at qeventloop_x11.cpp:389
#33 0x00002aaaae6d398c in QEventLoop::enterLoop (this=0x7e62a0) at qeventloop.cpp:198
#34 0x00002aaaae6d3889 in QEventLoop::exec (this=0x7e62a0) at qeventloop.cpp:145
#35 0x00002aaaae6c0b74 in QApplication::exec (this=0x7fffffe7d650) at qapplication.cpp:2758
#36 0x00000000004abdb1 in main (argc=8822448, argv=0x7fffffe7d968) at /home/kdedev/src/kde/kdemultimedia/juk/main.cpp:93
Comment 3 Scott Wheeler 2005-09-20 18:51:12 UTC
SVN commit 462306 by wheeler:

Make sure that we don't call setup twice since it causes some
bad-and-a-half things to happen.  (Basically an endless loop.)

BUG:106038


 M  +6 -1      playermanager.cpp  


--- branches/KDE/3.5/kdemultimedia/juk/playermanager.cpp #462305:462306
@@ -92,7 +92,8 @@
     m_player(0),
     m_timer(0),
     m_noSeek(false),
-    m_muted(false)
+    m_muted(false),
+    m_setup(false)
 {
 // This class is the first thing constructed during program startup, and
 // therefore has no access to the widgets needed by the setup() method.
@@ -600,6 +601,10 @@
         return;
     }
 
+    if(m_setup)
+        return;
+    m_setup = true;
+
     // initialize action states
 
     action("pause")->setEnabled(false);