Hi,
I have a little problem when replaying recordings. Sometimes (seldom) vdr crashes during replay. I can't reproduce it, the same recording works fine when i play it next time. The problem occurs about once a week. The vdr Version is 1.3.45 with Bigpatch, With older versions it was the same, i don't know exactly with with version is begun.
When i check the backtrace its always the same, the mi pointer cMarks::Get is wrong.
The backtrace:
#0 Get__6cMarksi (this=0x8621f10, Position=8780) at recording.c:1429 1429 if (mi->position == Position) (gdb) bt #0 Get__6cMarksi (this=0x8621f10, Position=8780) at recording.c:1429 #1 0x080a3546 in Action__10cDvbPlayer (this=0x87a77b8) at dvbplayer.c:692 #2 0x080ff884 in StartThread__7cThreadP7cThread (Thread=0x87a77c4) at thread.c:244 #3 0xb7ee30ba in pthread_start_thread () from /lib/libpthread.so.0 (gdb) list 1424 } 1425 1426 cMark *cMarks::Get(int Position) 1427 { 1428 for (cMark *mi = First(); mi; mi = Next(mi)) { 1429 if (mi->position == Position) 1430 return mi; 1431 } 1432 return NULL; 1433 } (gdb) p mi $1 = (cMark *) 0x31 (gdb) p *mi Cannot access memory at address 0x49 (gdb) p Position $2 = 8780
Tanks and Greetings Jörg Wendel
Jörg Wendel wrote:
I have a little problem when replaying recordings. Sometimes (seldom) vdr crashes during replay. When i check the backtrace its always the same, the mi pointer cMarks::Get is wrong.
The backtrace:
#0 Get__6cMarksi (this=0x8621f10, Position=8780) at recording.c:1429 1429 if (mi->position == Position) (gdb) bt #0 Get__6cMarksi (this=0x8621f10, Position=8780) at recording.c:1429 #1 0x080a3546 in Action__10cDvbPlayer (this=0x87a77b8) at dvbplayer.c:692 #2 0x080ff884 in StartThread__7cThreadP7cThread (Thread=0x87a77c4) at thread.c:244 #3 0xb7ee30ba in pthread_start_thread () from /lib/libpthread.so.0
If I read the backtrace correctly, then cMarks::Get() is called from cDvbPlayer::Action(). Since plain vanilla VDR doesn't call cMarks::Get() from cDvbPlayer::Action(), this crash is most probably caused by a patch.
Cheers,
Udo
On Sunday 09 April 2006 15:57, Udo Richter wrote:
Jörg Wendel wrote:
I have a little problem when replaying recordings. Sometimes (seldom) vdr crashes during replay. When i check the backtrace its always the same, the mi pointer cMarks::Get is wrong.
The backtrace:
#0 Get__6cMarksi (this=0x8621f10, Position=8780) at recording.c:1429 1429 if (mi->position == Position) (gdb) bt #0 Get__6cMarksi (this=0x8621f10, Position=8780) at recording.c:1429 #1 0x080a3546 in Action__10cDvbPlayer (this=0x87a77b8) at dvbplayer.c:692 #2 0x080ff884 in StartThread__7cThreadP7cThread (Thread=0x87a77c4) at thread.c:244 #3 0xb7ee30ba in pthread_start_thread () from /lib/libpthread.so.0
If I read the backtrace correctly, then cMarks::Get() is called from cDvbPlayer::Action(). Since plain vanilla VDR doesn't call cMarks::Get() from cDvbPlayer::Action(), this crash is most probably caused by a patch. Cheers, Udo
thanks for the hint, now i've looked in the sources, it seems to be triggered by the cMarks::Get() call of the JumpPlay Patch. But why the mi pointer can go corrupt when Get itterate through the marks? May be a problem with parallel access from different threads?
Greetings Jörg