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.