Another bug has pissed me enough to star...
Another bug has pissed me enough to start debugging. This time it is
Totem-xine crashing on startup in Ubuntu dapper.
The first
thing is that you cann't rebuild totem from sources multiple time after
ubuntu patches - ubuntu uses dpatch to patch something in automake files
and after the build has been run, the unpatch fails thus preventing a
rebuild, doh! Worked around that by removing that patch. (Bug not
reported yet)
After installing totem-gstreamer, my main
suspect is the change to the statusbar, that look very recent. Could it
be that Totem developers forgot a critical fix to the xine backend?
Could it be that the treat xine backend as a ... second class citizen?
To what? To that GStreamer? I tried to use GStreamer, I really did, but
there are a few tiny issues: 1) it doesn't open even half the files that
xine does, 2) within 5 minutes of a movie audio-video can easily get out
of sync by 5 seconds. I have never seen A-V sync in xine. Ever. I love
telling our Windows using frends that my movies "just work" with
totem-xine, please do not take that away!
Anyway - back to
the bug we go.
As we have a clean crash, I recompiled totem
with debugging symbols ("DEB_BUILD_OPTS=nostrip,noopt debuild -us -uc")
and run with gdb. When totem crashed, I got the code line, where it
happened:
(totem:4608): GLib-GObject-WARNING **: invalid cast from ` ' to `TotemTimeLabel'
Program received signal SIGSEGV, Segmentation fault.
0x08068659 in totem_time_label_set_time (label=0x8199a60, time=0, length=0) at totem-time-label.c:69
69 if (time / 1000 == label->priv->time / 1000
Now, that is interesting, lets see, what we have here - time is an int, so no segfaults from there, but label is a TotemTimeLabel. Hmm, that error now makes sense. And when we take a look at label->priv, it appears to be a pointer to TotemTimeLabelPrivate with an address of 0xffffffff. That's the problem, now we only need to backtrace trough the program and find the bug that is causing that.
Well all looks pretty nice - there is a "tick" event in the player that calls the time update. Not really clear, why there is such a discrepance between GtkLabel and TotemTimeLabel or why this structure is not inicialized in time. More strange is that gstreamer backend never calls this function. Wierd. Let's see what happens if I just return from it without doing anything. Does not help - now statusbar is crashing.
Let's try it from another angle - it worked before. Nothing much in totem changed since release of breezy. Installing the version from breezy, it works fine. Recompiling the version from breezy on dapper - crashes. Ouch! It looks like xine backend of totem has not been ported to that new crazy Gnome 2.12 thingie, like gstreamer backend was. Strange - that is a backend, it should not be dependent on the frontend, no? Anyway, it is not something I can do - I will have to install the breezy version, hack some dependencies to make it no conflict with one optional library and then file a critical bug on totem for breaking the xine backend.
But even that will have to wait 'till tomorrow, sleep is of the essence, anywere.