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

Klaus Schmidinger Klaus.Schmidinger at cadsoft.de
Mon Aug 1 16:11:21 CEST 2005


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



More information about the vdr mailing list