[vdr] Memory access error while attach player?

Patrick Fischer patrick_fischer at gmx.de
Thu Dec 15 17:42:42 CET 2005


I have implemanded a mutex but the problem might be the same.

Now I know the real problem.

If I make a cControl::Launch(new cReplayControl); from a thread, you 
told me that the main loop will Attach it. The Attach call is at the 
beginning of the main loop.
But if my Thread will call the Launch(..) only a short time after the 
main loop has called the Attach(..), then the line 814 will call 
ProcessKey from my cReplayControl. But if this cReplayControl is not 
activ it will return osEnd and the main loop will call 
cControl::Shutdown() my ReplayControl.

Its an vicious circle :-(
I can defuse it by calling cControl::Attach(); directly after 
cControl::Launch(new cReplayControl); but this will not fix the problem.

Tomorrow I will test if it works better if I inherit from cReplayControl 
and don't return osEnd from calling ProcessKey().

Cu
Patrick

Klaus Schmidinger schrieb:

> Patrick Fischer wrote:
>
>>
>>> You could remove the
>>>
>>>   cControl::Attach();
>>>
>>> call from your code (this is done in VDR's main loop in the
>>> foreground thread) and add a mutex to cControl that guards
>>> all calls to its member functions.
>>>
>>> Klaus
>>
>>
>>
>> What did you mean by "add"? I can't find a mutex in cControl.
>
>
> That's why I wrote "add" ;-)
>
>> Did you mean this?: (myMutex is a private cMutex from cMyPlayer)
>>
>> bool cMyPlayer::start(const char *path)
>> {
>>    cMutexLock MutexLock(&myMutex);      cRecording *recording = 
>> Recordings.GetByName(path);
>>    if (recording) {
>>        cReplayControl::SetRecording(NULL, NULL);
>>        cControl::Shutdown();
>>        cResumeFile resume(recording->FileName());
>>        resume.Delete();
>>        cReplayControl::SetRecording(recording->FileName(), 
>> recording->Title());
>>        cControl::Launch(new cReplayControl);
>>       // cControl::Attach(); //will done in the foreground thread
>>        return true;
>>    }else
>>        return false;
>> }
>>
>> In this case I only protect my own function. This will protect that 
>> my thread can't recall start until it is done. Thats OK.
>> Or did you mean that I need to patch the cControl by adding a Mutex 
>> and protect all memberfunctions?
>
>
> Yes.
>
>> If I do so, will you add this patch to
>> upcoming vdr versions? I don't want to patch all upcoming versions.
>
>
> If it works, yes.
>
> Klaus
>
> _______________________________________________
> vdr mailing list
> vdr at linuxtv.org
> http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
>
>




More information about the vdr mailing list