Re: [Kaffeine-user] Multithread issue (Was: Hang after stop scan)
Brought to you by:
hftom,
lasselindqvist
From: Mario R. <mar...@go...> - 2006-11-30 19:55:10
|
> This problem is very fedora specific. > -fasynchronous-unwind-tables fixed that with fc4. > No difference. I've done ./configure CCFLAGS=-fas... CXXFLAGS=-fas... and I could see that gcc was using this flag while compiling. Here is the output (which some printf's I've added) 0 /dev/dvb/adapter0/frontend0 : opened ( DiBcom 3000MC/P ) /dev/dvb/adapter0/frontend1 : : No such file or directory /dev/dvb/adapter1/frontend0 : : No such file or directory QLayout "unnamed" added to QWidget "unnamed", which already has a layout [andrea@thinkpad multimedia]$ DvbCam::probe(): /dev/dvb/adapter0/ca0: : No such file or directory Using DVB device 0:0 "DiBcom 3000MC/P" tuning DVB-T to 505833000 Hz inv:2 bw:0 fecH:3 fecL:9 mod:1 tm:0 gi:0 hier:0 . LOCKED. Transponders: 1/1 Reading SDT: pid=17 BBC ONE: sid=4164 BBC TWO: sid=4228 BBC THREE: sid=4351 BBC NEWS 24: sid=4415 BBCi: sid=4479 CBBC Channel: sid=4671 Reading PAT: pid=0 Reading PMT: pid=4164 DVB SUB on BBC ONE page_id: 1 anc_id: 1 lang: eng Reading PMT: pid=4228 DVB SUB on BBC TWO page_id: 1 anc_id: 1 lang: eng Reading PMT: pid=4351 DVB SUB on BBC THREE page_id: 1 anc_id: 1 lang: eng Reading PMT: pid=4415 DVB SUB on BBC NEWS 24 page_id: 1 anc_id: 1 lang: eng Reading PMT: pid=4479 Reading PMT: pid=4671 Reading NIT: pid=16 Found frequency list. 697833 690166 554000 Appending freq 697833 to 505833 Appending freq 690166 to 505833 Appending freq 554000 to 505833 Found frequency list. 658166 746000 474000 Found frequency list. 634166 786166 498000 Found frequency list. 714166 777833 522000 Found frequency list. 682166 802000 618166 Found frequency list. 738000 826000 834000 Frontend closed Using DVB device 0:0 "DiBcom 3000MC/P" tuning DVB-T to 481833000 Hz inv:2 bw:0 fecH:2 fecL:1 mod:3 tm:0 gi:0 hier:0 . LOCKED. Transponders: 2/6 DVBsi::stop() called // ############# Reading SDT: pid=17 ITV1: sid=8261 ITV3: sid=8294 ITV2: sid=8325 ITV4: sid=8353 CITV: sid=8358 Channel 4: sid=8384 SETANTA SPORTS: sid=8390 More 4: sid=8442 E4: sid=8448 Film4+1: sid=8452 Teletext: sid=8517 Teletext Cars: sid=8643 Teletext on 4: sid=8768 729: sid=8771 728: sid=8772 Stopping Nit from DVBsi::out() // ############# Stopping Nit from DVBsi::stop() // ############# NitSection::stop() terminate called, 84CADC0 // ############# NitSection::stop() wait called, 84CADC0 // ############# NitSection::stop() terminate called, 84CADC0 // ############# NitSection::stop() wait called, 84CADC0 // ############# Basically the 2 waits called on the NitSection never return. Here is the list of printfs added Index: src/input/dvb/dvbsi.cpp =================================================================== --- src/input/dvb/dvbsi.cpp (revision 609242) +++ src/input/dvb/dvbsi.cpp (working copy) @@ -56,8 +56,11 @@ void NitSection::stop() { if ( !wait(1000) ) { + printf("NitSection::stop() terminate called, %8X\n", this); terminate(); + printf("NitSection::stop() wait called, %8X\n", this); wait(); + printf("NitSection::stop() wait returned, %8X\n", this); } } @@ -620,18 +623,25 @@ void DVBsi::stop() { + printf("DVBsi::stop() called\n"); + if ( !isRunning ) return; isRunning = false; if ( !wait(2000) ) { if ( ns ) { + printf("Stopping Nit from DVBsi::stop()\n"); ns->stop(); delete ns; ns = 0; + printf("Nit Stopped from DVBsi::stop()\n"); } + printf("DVBsi::stop(): terminate called\n"); terminate(); wait(); + printf("DVBsi::stop(): wait returned\n"); + if ( scanMode<2 ) dvb->stopScan(); } @@ -642,12 +652,19 @@ void DVBsi::out( bool stopscan ) { if ( ns ) { + printf("Stopping Nit from DVBsi::out()\n"); ns->stop(); delete ns; ns = 0; + printf("Nit Stopped from DVBsi::out()\n"); + } if ( stopscan ) - dvb->stopScan(); + { + printf("Stopping DVB from DVBsi::out()\n"); + dvb->stopScan(); + printf("DVB Stopped from DVBsi::out()\n"); + } KApplication::kApplication()->postEvent( this, new QTimerEvent( TIMER_EVENT_SCAN_END ) ); } Index: src/input/dvb/dvbstream.cpp =================================================================== --- src/input/dvb/dvbstream.cpp (revision 609242) +++ src/input/dvb/dvbstream.cpp (working copy) @@ -1180,8 +1180,12 @@ { isRunning = false; if ( !wait(5000) ) { + printf("DvbStream: terminate called\n"); + terminate(); wait(); + printf("DvbStream: wait returned\n"); + fprintf(stderr,"dvbstream::run() terminated\n"); } if ( cam ) |