I added some debugging and it appears that something goes wrong in the
exit from the __init_pipeline function.

I then ran ql under gdb and put a breakpoint on g_return_if_fail_warning
(which produces the first
"/usr/lib/pymodules/python2.6/quodlibet/player/gstbe.py:326: Warning:
g_object_get_qdata: assertion `G_IS_OBJECT (object)' failed" warning.
Backtrace shows 
        #0  0x00007ffff5ed12f0 in g_return_if_fail_warning () from 
/lib/libglib-2.0.so.0
        #1  0x00007ffff6580bc1 in g_object_get_qdata (object=0x556a020, 
quark=57) at /scratch/build-area/glib2.0-2.24.2/gobject/gobject.c:2513
        #2  0x00007ffff557c8dc in pygobject_get_inst_data (self=0x4edad20) at 
/scratch/build-area/pygobject-2.21.4+is.2.21.3/gobject/pygobject.c:101
        #3  pygobject_dealloc (self=0x4edad20) at 
/scratch/build-area/pygobject-2.21.4+is.2.21.3/gobject/pygobject.c:1014
        #4  0x0000000000537533 in frame_dealloc (f=
            Frame 0x4d68100, for file 
/usr/lib/pymodules/python2.6/quodlibet/player/gstbe.py, line 154, in 
__init_pipeline (vol=<__main__.GstVolume at remote 0x4edad70>, idx=2, 
elem=<__main__.GstGConfAudioSink at remote 0x4edac80>, 
result=<StateChangeReturn at remote 0x12ee690>, state=<State at remote 
0x12ee550>, oldstate=<State at remote 0x12ee4b0>, gpad=<gst.GhostPad at remote 
0x4edae10>, id=970L, bus=<gst.Bus at remote 0x4edae60>)) at 
../Objects/frameobject.c:420
        #5  0x00000000004a84c6 in fast_function (f=
            Frame 0x4f34a00, for file 
/usr/lib/pymodules/python2.6/quodlibet/player/gstbe.py, line 326, in _end 
(self=<GStreamerPlayer(bin=<__main__.GstPlayBin2 at remote 0x4edadc0>, 
info=<FLACFile() at remote 0x3609fd0>, name='gconfaudiosink profile=music', 
_paused=True, version_info='GStreamer: 0.10.30.0 / PyGSt: 0.10.19', 
_in_gapless_transition=False, _volume=<float at remote 0x4eb38c8>, 
_source=<PlaylistMux(q=<PlaylistModel(_PlaylistModel__iter=None, 
order=<OrderInOrder(playlist=<...>) at remote 0x4952e10>) at remote 0x4962cd0>, 
pl=<PlaylistModel(_PlaylistModel__iter=<gtk.TreeIter at remote 0x470ad28>, 
order=<OrderInOrder(playlist=<...>) at remote 0x4967a10>, sourced=True) at 
remote 0x4960780>) at remote 0x49613d0>, _GStreamerPlayer__bus_id=971L, 
_vol_element=<__main__.GstVolume at remote 0x4edad70>, 
_GStreamerPlayer__atf_id=970L, _GStreamerPlayer__elem_id=972L, _length=155000, 
librarian=<SongLibrarian(libraries={'main': <SongFileLibrary(get=<built-in 
method get of dict object at remote 0x15cb4c0>, keys=<built-in 
met...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3838
        #6  call_function (f=
            Frame 0x4f34a00, for file 
/usr/lib/pymodules/python2.6/quodlibet/player/gstbe.py, line 326, in _end 
(self=<GStreamerPlayer(bin=<__main__.GstPlayBin2 at remote 0x4edadc0>, 
info=<FLACFile() at remote 0x3609fd0>, name='gconfaudiosink profile=music', 
_paused=True, version_info='GStreamer: 0.10.30.0 / PyGSt: 0.10.19', 
_in_gapless_transition=False, _volume=<float at remote 0x4eb38c8>, 
_source=<PlaylistMux(q=<PlaylistModel(_PlaylistModel__iter=None, 
order=<OrderInOrder(playlist=<...>) at remote 0x4952e10>) at remote 0x4962cd0>, 
pl=<PlaylistModel(_PlaylistModel__iter=<gtk.TreeIter at remote 0x470ad28>, 
order=<OrderInOrder(playlist=<...>) at remote 0x4967a10>, sourced=True) at 
remote 0x4960780>) at remote 0x49613d0>, _GStreamerPlayer__bus_id=971L, 
_vol_element=<__main__.GstVolume at remote 0x4edad70>, 
_GStreamerPlayer__atf_id=970L, _GStreamerPlayer__elem_id=972L, _length=155000, 
librarian=<SongLibrarian(libraries={'main': <SongFileLibrary(get=<built-in 
method get of dict object at remote 0x15cb4c0>, keys=<built-in 
met...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3771
        #7  PyEval_EvalFrameEx (f=
            Frame 0x4f34a00, for file 
/usr/lib/pymodules/python2.6/quodlibet/player/gstbe.py, line 326, in _end 
(self=<GStreamerPlayer(bin=<__main__.GstPlayBin2 at remote 0x4edadc0>, 
info=<FLACFile() at remote 0x3609fd0>, name='gconfaudiosink profile=music', 
_paused=True, version_info='GStreamer: 0.10.30.0 / PyGSt: 0.10.19', 
_in_gapless_transition=False, _volume=<float at remote 0x4eb38c8>, 
_source=<PlaylistMux(q=<PlaylistModel(_PlaylistModel__iter=None, 
order=<OrderInOrder(playlist=<...>) at remote 0x4952e10>) at remote 0x4962cd0>, 
pl=<PlaylistModel(_PlaylistModel__iter=<gtk.TreeIter at remote 0x470ad28>, 
order=<OrderInOrder(playlist=<...>) at remote 0x4967a10>, sourced=True) at 
remote 0x4960780>) at remote 0x49613d0>, _GStreamerPlayer__bus_id=971L, 
_vol_element=<__main__.GstVolume at remote 0x4edad70>, 
_GStreamerPlayer__atf_id=970L, _GStreamerPlayer__elem_id=972L, _length=155000, 
librarian=<SongLibrarian(libraries={'main': <SongFileLibrary(get=<built-in 
method get of dict object at remote 0x15cb4c0>, keys=<built-in 
met...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:2412
        #8  0x00000000004a95c1 in PyEval_EvalCodeEx (co=0xe413f0, 
globals=<value optimized out>, locals=<value optimized out>, args=0x3, 
argcount=<value optimized out>, 
            kws=<value optimized out>, kwcount=0, defs=0x12fade8, defcount=1, 
closure=0x0) at ../Python/ceval.c:3000
        #9  0x00000000004a7752 in fast_function (f=
            Frame 0x4f624f0, for file 
/usr/lib/pymodules/python2.6/quodlibet/player/_base.py, line 109, in go_to 
(self=<GStreamerPlayer(bin=<__main__.GstPlayBin2 at remote 0x4edadc0>, 
info=<FLACFile() at remote 0x3609fd0>, name='gconfaudiosink profile=music', 
_paused=True, version_info='GStreamer: 0.10.30.0 / PyGSt: 0.10.19', 
_in_gapless_transition=False, _volume=<float at remote 0x4eb38c8>, 
_source=<PlaylistMux(q=<PlaylistModel(_PlaylistModel__iter=None, 
order=<OrderInOrder(playlist=<...>) at remote 0x4952e10>) at remote 0x4962cd0>, 
pl=<PlaylistModel(_PlaylistModel__iter=<gtk.TreeIter at remote 0x470ad28>, 
order=<OrderInOrder(playlist=<...>) at remote 0x4967a10>, sourced=True) at 
remote 0x4960780>) at remote 0x49613d0>, _GStreamerPlayer__bus_id=971L, 
_vol_element=<__main__.GstVolume at remote 0x4edad70>, 
_GStreamerPlayer__atf_id=970L, _GStreamerPlayer__elem_id=972L, _length=155000, 
librarian=<SongLibrarian(libraries={'main': <SongFileLibrary(get=<built-in 
method get of dict object at remote 0x15cb4c0>, keys=<built-in 
me...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3846
        #10 call_function (f=
            Frame 0x4f624f0, for file 
/usr/lib/pymodules/python2.6/quodlibet/player/_base.py, line 109, in go_to 
(self=<GStreamerPlayer(bin=<__main__.GstPlayBin2 at remote 0x4edadc0>, 
info=<FLACFile() at remote 0x3609fd0>, name='gconfaudiosink profile=music', 
_paused=True, version_info='GStreamer: 0.10.30.0 / PyGSt: 0.10.19', 
_in_gapless_transition=False, _volume=<float at remote 0x4eb38c8>, 
_source=<PlaylistMux(q=<PlaylistModel(_PlaylistModel__iter=None, 
order=<OrderInOrder(playlist=<...>) at remote 0x4952e10>) at remote 0x4962cd0>, 
pl=<PlaylistModel(_PlaylistModel__iter=<gtk.TreeIter at remote 0x470ad28>, 
order=<OrderInOrder(playlist=<...>) at remote 0x4967a10>, sourced=True) at 
remote 0x4960780>) at remote 0x49613d0>, _GStreamerPlayer__bus_id=971L, 
_vol_element=<__main__.GstVolume at remote 0x4edad70>, 
_GStreamerPlayer__atf_id=970L, _GStreamerPlayer__elem_id=972L, _length=155000, 
librarian=<SongLibrarian(libraries={'main': <SongFileLibrary(get=<built-in 
method get of dict object at remote 0x15cb4c0>, keys=<built-in 
me...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3771
        #11 PyEval_EvalFrameEx (f=

So it appears as if the error is occurring because of the destruction of
some local variable or other, which suggests some sort of referencing
counting problem (I'm not sure how this is supposed to work so I'm
guessing).

Next I added to the end of the __init_pipeline function:
        for l in locals().keys():
                if l == "self": continue
                print "%s = %s" % (l, locals()[l])
                del locals()[l]
to try and simulate the cleanup on exit... (not very realistic). This
resulted in 
        pipeline = [<__main__.GstQueue object (queue0) at 0x4ed9d20>, 
<__main__.GstVolume object (volume0) at 0x4ed9d70>, <__main__.GstGConfAudioSink 
object (gconfaudiosink0) at 0x4ed9c80>]
        idx = 2
        vol = /GstBin:bin0/GstVolume:volume0 (__main__.GstVolume)
        bus = /GstBus:bus7 (gst.Bus)
        gpad = /GstBin:bin0.GstGhostPad:sink (gst.GhostPad)
        elem = /GstBin:bin0/GstGConfAudioSink:gconfaudiosink0 
(__main__.GstGConfAudioSink)
        queue = /GstBin:bin0/GstQueue:queue0 (__main__.GstQueue)
        oldstate = <enum GST_STATE_VOID_PENDING of type GstState>
        state = <enum GST_STATE_READY of type GstState>
        bufbin = /GstBin:bin0 (gst.Bin)
        result = <enum GST_STATE_CHANGE_SUCCESS of type GstStateChangeReturn>
        id = 965
        
        (quodlibet:5795): GStreamer-CRITICAL **: 
        Trying to dispose object "sink", but it still has a parent "bin0".
        You need to let the parent manage the object instead of unreffing the 
object directly.
        
        
        (quodlibet:5795): GStreamer-CRITICAL **: 
        Trying to dispose object "gconfaudiosink0", but it still has a parent 
"bin0".
        You need to let the parent manage the object instead of unreffing the 
object directly.
        
        
        (quodlibet:5795): GStreamer-CRITICAL **: 
        Trying to dispose object "queue0", but it still has a parent "bin0".
        You need to let the parent manage the object instead of unreffing the 
object directly.
        
        
        Breakpoint 9, 0x00007ffff5ed12f0 in g_return_if_fail_warning () from 
/lib/libglib-2.0.so.0

Not sure if that tells you anything!

I also tried adding "del XXX" and "XXX = None" to the end of
__init_pipeline for various combinations local variables, which didn't
really tell me much...

If there is any other debugging I can try please let me know. I've not
been able to make refdbg work.

Ian.

-- 
Ian Campbell

The plot was designed in a light vein that somehow became varicose.
                -- David Lardner

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to