GNOME Bugzilla – Bug 313136
[playbin] hang while playing truncated ogg file
Last modified: 2006-04-11 13:52:42 UTC
Steps to reproduce: 1. Just add folder containing a truncated .ogg file. Stack trace: Program hangs. Other information:
Playing a truncated ogg file works for me using both Rhythmbox 0.8.8, and 0.9.0 with gstreamer & gst-plugins 0.8.10. What versions of gstreamer/gst-plugins do you have? If possible can you attach a small truncated file that doesn't work for you.
Created attachment 50550 [details] I truncated the file after tag "genre"
Rename it to something with extension .ogg. I'm running rhythmbox 0.8.8, gst & plugins 0.8.10
Sorry for the fragmented msg. How to reproduce: 1. Download the attachment, put it in a folder, and rename it test.ogg 2. Start rhythm box 3. Add the folder 4. Add the same folder again 5. Note the bottom right status says "loading songs" 6. Try to quit the program, it'll crash.
For me Rhythmbox, Totem and gst-launch all refuse to play that file saying they can't find a decoder for it (using gstreamer and gst-plugis 0.8.10). What versions of gstreamer and gst-plugins do you have?
Rhythmbox 0.8.8 gstreamer 0.8.10 gst-plugins 0.8.10 libogg-1.1.2 (Part of slackware 10.1 + dropline gnome 2.10 distribution). top also shows rhythmbox consuming 99% CPU when it happens. If I corrupt an ogg file by modifying some bits, it'll behave right. But if I truncate the file shorter than offset 1000, this bug will show. Here's another attachment.
Created attachment 50572 [details] test9.ogg
That one given me the following when I attempt to use play it with gst-launch (using playbin) doc@alyrion$ gst-launch playbin uri=file:///tmp/test9.ogg GStreamer-WARNING **: element internal_thread claimed state-change success,but state didn't change to PLAYING. State is PAUSED (NONE_PENDING pending), fix the element ERROR: from element /playbin0: There were no decoders found to handle the stream, you might need to install the corresponding plugins ERROR: pipeline doesn't want to play. (process:15501): GLib-GObject-WARNING **: invalid uninstantiatable type `(null)' in cast to `GstObject' Segmentation fault Running "gst-launch -t gnomevfssrc location=file:///tmp/test9.ogg ! decodebin ! fakesink" (which is what RB uses to load the metadata) finds the serial tag and then ends normally. Can you get a backtrace of when Rhythmbox hangs? http://live.gnome.org/GettingTraces contains some instructions, all you need to do is type Control-Z in the terminal to get it to drop into gdb when RB hangs.
I did the following : gdb rhythmbox , run , make it hang, ctrl-c on gdb, thread apply all bt OUTPUT: Program received signal SIGINT, Interrupt. [Switching to Thread 147465 (LWP 1686)] 0x40e679f3 in __pthread_sigsuspend () from /lib/libpthread.so.0 (gdb) thread apply all bt
+ Trace 62418
Thread 11 (Thread 147465 (LWP 1686))
Thread 10 (Thread 131080 (LWP 1685))
Thread 9 (Thread 114695 (LWP 1684))
That stack trace is odd. It contains several gnome_vfs_ssl_to_socket calls - is the track you are trying to play on a remote system (over the network)? If so does accessing that system usually require entering something in an authentication dialog box?
It is located on my local reiserfs file system. Let me know if anything I can do to help debug.
Okay, "gst-launch playbin uri=..." (using 0.8.11) spews lots of the following errors when attempting to play the second attachment, until it is killed. GStreamer-CRITICAL **: gst_bin_remove: assertion `GST_IS_ELEMENT (element)' failed GLib-GObject-WARNING **: invalid uninstantiatable type `<invalid>' in cast to `GstElement' "gst-launch gnomevfsfilesrc uri=... ! decodebin ! audioconvert ! audioscale ! gconfaudiosink" works cleanly though. This looks like a playbin bug, so I'm moving it to gstreamer.
Could be related to bug #111146.
Actually, this doesn't work in HEAD either. Thanks for bringing the bug to our attention. The 0.8 size is close to unsolvable, given that RB uses threads. Luckily we release the new one in a month and a half.
Migrating to 0.10. Still doesn't play nicely.
In 0.10 at the moment, I get a really weird stacktrace with these 2 test files:
+ Trace 66052
This is pointing at an unsafe refcount handling bug. Probably in playbin somewhere, but it won't be fun to find it, I'm betting.
gst-head dolphy@dell:~/workdir/gstreamer/gstreamer-head$ gst-launch-0.10 filesrc location=~/test.ogg ! oggdemux ! vorbisdec ! audioconvert ! alsasink Setting pipeline to PAUSED ... Pipeline is PREROLLING ... Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstSystemClock Got EOS from element "pipeline0". Execution ended after 1054000 ns. Setting pipeline to PAUSED ... Setting pipeline to READY ... Setting pipeline to NULL ... FREEING pipeline ... Seems to do the right thing for me in cvs HEAD. Can you still reproduce ?
Both truncated files work for me with CVS HEAD as well now, so closing ...