Hi,
please have a look at the backtraces of the following threads:
VDR's main thread:
(gdb) bt #0 0xffffe410 in __kernel_vsyscall () #1 0xb7f20c1e in __lll_mutex_lock_wait () from /lib/libpthread.so.0 #2 0xb7f1ca58 in _L_mutex_lock_86 () from /lib/libpthread.so.0 #3 0xb7f1c47d in __pthread_mutex_lock (mutex=0xa44ceec) at pthread_mutex_lock.c:81 #4 0x0814e111 in cMutex::Lock (this=0xa44ceec) at thread.c:191 #5 0x080c0656 in cThread::Lock (this=0xa44cedc) at thread.h:91 #6 0x0814e14a in cThreadLock::Lock (this=0xbfbeea90, Thread=0xa44cedc) at thread.c:392 #7 0x0814e18e in cThreadLock (this=0xbfbeea90, Thread=0xa44cedc) at thread.c:379 #8 0xb7a9e6d4 in cDvdPlayer::SetAudioTrack (this=0xa44ced0, Type=ttDolby, TrackId=0xa3d1a62) at player-dvd.c:2536 #9 0x080bb367 in cDevice::SetCurrentAudioTrack (this=0xa3d11a0, Type=ttDolby) at device.c:1058 #10 0x080e88d9 in cDisplayTracks::ProcessKey (this=0x88021d8, Key=kAudio) at menu.c:3595 #11 0x080e3773 in cDisplayTracks::Process (Key=kAudio) at menu.c:3545 #12 0x0815dec5 in main (argc=16, argv=0xbfbeef34) at vdr.c:1035
vdr-dvd's DvdPlayer thread:
(gdb) bt #0 0x08159ef8 in Watchdog (signum=14) at vdr.c:164 #1 <signal handler called> #2 0xffffe40e in __kernel_vsyscall () #3 0xb7f20c1e in __lll_mutex_lock_wait () from /lib/libpthread.so.0 #4 0xb7f1ca58 in _L_mutex_lock_86 () from /lib/libpthread.so.0 #5 0xb7f1c47d in __pthread_mutex_lock (mutex=0xa3d224c) at pthread_mutex_lock.c:81 #6 0x0814e111 in cMutex::Lock (this=0xa3d224c) at thread.c:191 #7 0x0814e1e2 in cMutexLock::Lock (this=0xb18f61a0, Mutex=0xa3d224c) at thread.c:366 #8 0x0814e226 in cMutexLock (this=0xb18f61a0, Mutex=0xa3d224c) at thread.c:353 #9 0x080bf264 in cDevice::PlayPesPacket (this=0xa3d11a0, Data=0xafd00690 "", Length=2034, VideoOnly=false) at device.c:1274 #10 0x080be564 in cDevice::PlayPes (this=0xa3d11a0, Data=0xafd00690 "", Length=2034, VideoOnly=false) at device.c:1410 #11 0x081141f3 in cPlayer::PlayPes (this=0xa44ced0, Data=0xafd00690 "", Length=2034, VideoOnly=false) at player.c:29 #12 0xb7a9fdf1 in cDvdPlayer::Action (this=0xa44ced0) at player-dvd.c:730 #13 0x0814de6e in cThread::StartThread (Thread=0xa44cedc) at thread.c:255 #14 0xb7f1a192 in start_thread (arg=0xb18f6b90) at pthread_create.c:296 #15 0xb7cd902e in clone () from /lib/libc.so.6
In frame #9 of VDR's main thread, mutexCurrentAudioTrack get's locked, then in frame #8, cDvbPlayer's thread mutex is to be aquired (LOCK_THREAD).
In frame #12 vdr-dvd's DvdPlayer thread locked it's mutex (LOCK_THREAD), then in frame #9, mutexCurrentAudioTrack is to be aquired.
As both threads lock the same mutexes in opposite order a deadlock occurs.
As I'm not used to vdr-dvd development, I would be glad if someone could provide a fix for this issue.
Bye.