Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[vdr] Re: Segment faults 43



Rainer Zocholl wrote:
Klaus.Schmidinger@cadsoft.de(Klaus Schmidinger)  03.12.04 17:19



C.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




Home | Main Index | Thread Index