[Kaffeine-user] Multithread issue (Was: Hang after stop scan)
Brought to you by:
hftom,
lasselindqvist
From: Mario R. <mar...@go...> - 2006-11-29 22:17:42
|
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". > > ciao > |