[vdr] MP3-plugin problems with slow cpu

Martin Cap macap20001 at compuserve.de
Sun Jul 24 16:25:49 CEST 2005

On 21 Apr 2005 Stefan Huelswitt <s.huelswitt at gmx.de> wrote:
 >> Markku Tavasti wrote:
 >> With version 0.9.12 of the plugin I get the following (Intel Celeron
 >> 433Mhz, output via OSS, black background) :
 >> - Only stable when playing streams over network.
 >> - Always crashes (well VDR takes 99% of CPU time) when playing songs
 >> from harddrive which are "new"
 >> (ie. no id3-tag got scanned). The next time the song gets played it
 >> works, besides this :
 >> - Frequent crashes when changing songs from harddrive (again, VDR takes
 >> 99% of CPU time),
 >> AFAIS, the plugin got some ugly race conditions concering threads.
 >This might be possible, but I don't know how to debug this as
 >nothing of it happens on my machine (playing a lot song from
 >harddisc, right now for 6 hours continiously).
 >My suggestion is that somebody with that problem, please wait
 >until vdr hangs with 100% cpu and then hook gdb to this process
 >to see which thread it is and where it hangs.
 >I'm sorry, but I'm currently rather busy with other stuff, so
 >that I cannot spent time on this myself. I'm be back on this in a
 >week or two...


first, my apologies for my really late reply.

Back to the problem above: I did a backtrace with gdb, and it seems the 
plugin itself isn't the problem (my setup?),
read() blocks infinitely trying to read the mp3-file. I don't know why 
and I'm asking for your help/comments.

Oh, here's the backtrace:
(gdb) thread 2
[Switching to thread 2 (Thread -1320977488 (LWP 4039))]#0  0xb7f796a1 in 
__read_nocancel () from /lib/tls/libpthread.so.0
(gdb) bt
#0  0xb7f796a1 in __read_nocancel () from /lib/tls/libpthread.so.0
#1  0xb76cc58c in cStream::Stream (this=0x93610c8, data=@0xb1427618, 
len=@0xb142761c, rest=0x93611d0 "") at stream.c:271
#2  0xb76d30e6 in cScanID3::DoScan (this=0x9361170) at decoder-mp3.c:39
#3  0xb76d1f6e in cMP3Decoder::Start (this=0x935f7a8) at decoder-mp3.c:159
#4  0xb76cae7d in cMP3Player::Action (this=0x9360580) at player-mp3.c:1798
#5  0x080ef2a2 in cThread::StartThread ()
#6  0xb7f74b63 in start_thread () from /lib/tls/libpthread.so.0
#7  0xb7e2918a in clone () from /lib/tls/libc.so.6
(gdb) *sigh*

Today I tried to set O_NONBLOCK to the open()-calls (the code does a 
"do{ r = read(...); }while(r!=-1 && r != EINTR);" at stream.c:271 so 
this works out-of-the-box), then again I tried a select() on the 
filedescriptor before stream.c:271. None of the mentioned worked.

I can comment out the call to doScan() in cMP3Player::Action to avoid 
scanning id3-tags. This makes the plugin work without id3-tags though 
(as one might expect...).

That's all I can think of for now, if you need more information, please 
let me know.

Martin Cap

More information about the vdr mailing list