[vdr] [PATCH] mp3-0.9.11 signals end of replay too late

Wolfgang Fritz wolfgang.fritz at gmx.net
Tue Mar 15 17:59:33 CET 2005


Stefan Huelswitt wrote:
> On 12 Mar 2005 Wolfgang Fritz <wolfgang.fritz at gmx.net> wrote:
> 
> 
>>Graphlcd crashes with segfault when stopping an MP3 replay because it
>>calls cMP3Control::GetIndex after the MP3 player object is already
>>destroyed.
>>
>>Reason: MP3 plugin signals end of replay too late. The attaches patch
>>fixes it.
> 
> 
> Ok, I changed the location, but I think that the real flaw is in
> VDRs player.h where the "player" var isn't checked before access.
> 

If tested this (temporarily inserted a test for player == 0 in
player.h), but it didn't help.

maybe

void cMP3Control::Stop(void)
{
  delete player; player=0;
  mgr->Halt();
  mgr->Flush(); //XXX remove later
}

has a concurrency problem? Who guarantees that no other thread
interrupts the mp3 thread while is in the destructor?

Wouldn't be something like this a little bit safer:

void cMP3Control::Stop(void)
{
  cMP3player *p = player;
  player = 0;
  delete p;
  mgr->Halt();
  mgr->Flush(); //XXX remove later
}

There seem to be more concurrency problems which crop up with the
graphlcd plugin. In rare cases I get a segfault when exiting a normal
vdr replay.

Wolfgang

> Regards.
> 





More information about the vdr mailing list