Stefan Huelswitt wrote: > On 12 Mar 2005 Wolfgang Fritz <wolfgang.fritz@xxxxxxx> 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. >