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.
--
Dipl.-Inform. (FH) Reinhard Nissl
mailto:rnissl@gmx.de