[vdr] [PATCH] fix segfault in cSkins::Message

Klaus Schmidinger Klaus.Schmidinger at cadsoft.de
Sun Nov 27 17:28:56 CET 2005


Klaus Schmidinger wrote:
> Wolfgang Rohdewald wrote:
> 
>> On Sonntag 31 Juli 2005 18:29, Klaus Schmidinger wrote:
>>
>>>> Does vdr have a way to notice if a background thread accesses the
>>>> OSD?
>>>
>>>
>>> A background thread should never access the OSD directly.
>>
>>
>>
>> I do understand that. I just think it might be helpful to not
>> simply say it is forbidden but to enforce it instead of
>> segfaulting.
>>
>> Considering the enormous amount of plugins there will always be
>> some plugin developers trying to do forbidden things and if a
>> user tells them "sometimes vdr restarts but I have no idea why"
>> it is almost impossible to debug that.
>>
>> If you take my original two patches you could do
>>
>>  void cSkinClassicDisplayMessage::Flush(void)
>>  {
>>   if (osd)
>>          osd->Flush();
>>   else
>>          warn: background thread is not allowed to access osd
>>  }
> 
> 
> You don't _know_ that this is because of a background thread.
> Besides, I'd hate to have to check 'osd' all over the place
> (and every plugin that implements a skin would have to do the same).
> 
> I guess I'll simply put a test into cSkinDisplay::cSkinDisplay()
> that aborts in case it gets called from a thread other than the
> foreground thread.
> 
>> Otherwise I believe I understand what you propose and it seems
>> to be a good solution to me.
> 
> 
> Ok, so I'll implement it that way.
> 
> Klaus

Well, after a weekend of consideration I decided to implement
a function that can be used by background threads to queue a
message for display (the thread can even wait for user input)
in VDR 1.3.37. Since a plugin's MainMenuFunction can
now (since VDR 1.3.32) be launched programmatically, a plugin that
wants to do more than just display a message can always launch
itself and interact with the user in the foreground.

I've abandoned the idea of implementing something like cPlugin::Popup()
because it would only make things very complicated.

Since handling subtitles shall be made an integral part of the
core VDR code in version 1.5.x I'll postpone all further OSD
handling considerations until then.

Klaus



More information about the vdr mailing list