Rainer Zocholl wrote:
Klaus.Schmidinger@cadsoft.de(Klaus Schmidinger) 03.12.04 17:19C.Y.M wrote:Rainer Zocholl wrote:It starts with the end of a recording. The life stream went black and stays black. The only applied patch is the LNB_sharing patch. Now VDR segfaults in the start phase. I assume that something ist not OK with the thread locking in the shut down phase. For example: the TSbuffer resources is deleted while a thread is still using it. (Have not analyzed if it is so, it's only an example)Yes, this is definitly a problem with the new threading of vdr-1.3.17. I have confirmed it with many others reporting the same error as you. If you search back on the list, you will find a patch I posted for 1.3.17 to revert back to the previous threading model of 1.3.16 (btw, the new thread.[ch] will not help).You really should try to fix the plugins that are having trouble.
I don't use any Plugins any more :-(
With the -IMHO very important- osdteletext plugin
my DVB-T is unusable.
Just reverting back to the 1.3.16 thread handling won't do you any good in the long run. Since VDR itself runs just fine with the files at ftp://ftp.cadsoft.de/vdr/Developer/thread.[hc] I'm not going to change anything in that area until somebody shows me proof of a bug.
I don't "see" where the destructors are stopping the threads
or are waiting to finish before releasing the data.
cDevice::~cDevice()
{
Detach(player);
for (int i = 0; i < MAXRECEIVERS; i++)
Detach(receiver[i]);
delete ciHandler;
delete nitFilter;
delete sdtFilter;
delete patFilter;
delete eitFilter;
delete sectionHandler;
}
How are the threads (cleanly) killed which "uses" an receiver?
I don't think that is the cause for the segfault.
It's just an example of the kind of code that makes me wonder ;-) learned: It's much easier to start threads than to stop them.
Rainer
From VDR/receiver.h: virtual void Activate(bool On) {} // This function is called just before the cReceiver gets attached to // (On == true) or detached from (On == false) a cDevice. It can be used // to do things like starting/stopping a thread. // It is guaranteed that Receive() will not be called before Activate(true). Klaus