Re: [Kaffeine-user] Multithread issue (Was: Hang after stop scan)
Brought to you by:
hftom,
lasselindqvist
From: Christophe T. <hf...@fr...> - 2006-11-29 23:49:15
|
Le Mercredi 29 Novembre 2006 23:07, Mario Rossi a =E9crit=A0: > I've found what is the problem: > > DVBsi::stop() sets the variable isRunning to false, telling the > methond "run" to stop the next time it checks the value of isRunning. > When that happens, on exit DVBsi::out() is called. This method will > "stop()" the NitSection, delete it and sets ns to 0. > > MeanWhile DVBsi::stop() waits in wait(2000), afterwards it stops the > SAME NitSection (if it gets there before the first stop() returns and > ns is set to 0). > > Here the programs hangs. > > Reading the thread documentation of Qt, it is suggested not to use > terminate to terminate a QThread object, but to signal it (like it is > done via isRunning) to stop, and gently wait for it to return. > Terminate() kills a thread without giving it the chance to clean > anything. > > IMHO all "stop" methods involved should use a signalling to tell the > QThread to return from "run". (e.g. a boolean variable, but I don't > know whether it is 100% thread-safe. I could be in single processor, > but I don't know in SMP). (maybe the variable should be protected via > a Mutex). > > In Qt 4.2 there are enhancements to help terminating QThreads, but I > am running Qt 3.3. > > I will try to extend the signalling system removing "terminate" and > see what happens. > > On 11/28/06, Mario Rossi <mar...@go...> wrote: > > I've tried to stop the scan for channels using the button in the scan > > dialog and kaffeine hangs indefinetely. > > This has happened always in the 3 times I've tried. > > > > It seems that it never returns from the function > > > > dvbsi->stop(); > > > > around line 856 in the file "scandialog.cpp". > > I've used the latest svn available. > > > > I haven't tried to debug it, I've added some "printf". This problem is very fedora specific. =2Dfasynchronous-unwind-tables fixed that with fc4. =2D-=20 Christophe Thommeret |