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... > Hi, 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. -- --- Regards, Martin Cap