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