Comment 5 for bug 737847

Revision history for this message
Conor Curran (cjcurran) wrote :

Jorg, I think the problem is that you are not wrapping your Metadata dict in a variant.

(gdb) bt
#0 0x00bd0832 in ?? () from /lib/ld-linux.so.2
#1 0x01022e71 in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#2 0x0102634e in abort () at abort.c:92
#3 0x00d723a0 in g_assertion_message (domain=0xd956e6 "GLib",
    file=0xddd57c "/build/buildd/glib2.0-2.28.4/./glib/gvariant-serialiser.c",
    line=1319, func=0xddd780 "g_variant_serialised_n_children",
    message=<value optimised out>)
    at /build/buildd/glib2.0-2.28.4/./glib/gtestutils.c:1358
#4 0x00d8e328 in g_variant_serialised_n_children (serialised=...)
    at /build/buildd/glib2.0-2.28.4/./glib/gvariant-serialiser.c:1319
#5 0x00d8a3d9 in g_variant_n_children (value=0x88d36b0)
    at /build/buildd/glib2.0-2.28.4/./glib/gvariant-core.c:819
#6 0x00d86e6e in g_variant_iter_init (iter=0xbfcf3a04, value=0x88d36b0)
    at /build/buildd/glib2.0-2.28.4/./glib/gvariant.c:2595
#7 0x080572b9 in mpris_player_dbus_proxy_get_Metadata (self=0x88a0198)
    at mpris2-interfaces.c:1280
#8 0x0805c261 in mpris2_controller_clean_metadata (self=0x88a66c8)
    at mpris2-controller.c:648
#9 0x0805c780 in mpris2_controller_property_changed_cb (self=0x88a66c8,
    interface_source=0x88cc028 "org.mpris.MediaPlayer2.Player",
    changed_properties=0x88c9690, invalid=0x88c2798, invalid_length1=0)
---Type <return> to continue, or q <return> to quit---
    at mpris2-controller.c:517
#10 0x00e65372 in g_closure_invoke (closure=0x88d3188, return_value=0x0,
    n_param_values=5, param_values=0x889d9c8, invocation_hint=0xbfcf3c30)
    at /build/buildd/glib2.0-2.28.4/./gobject/gclosure.c:767
#11 0x00e78048 in signal_emit_unlocked_R (node=0x88b4bb0, detail=0,
    instance=0x88a0690, emission_return=0x0, instance_and_params=0x889d9c8)
    at /build/buildd/glib2.0-2.28.4/./gobject/gsignal.c:3252
#12 0x00e80b29 in g_signal_emit_valist (instance=0x88a0690, signal_id=29,
    detail=0, var_args=0xbfcf3e88 "\230>Ͽ\002")
    at /build/buildd/glib2.0-2.28.4/./gobject/gsignal.c:2983
#13 0x00e80e3d in g_signal_emit_by_name (instance=0x88a0690,
    detailed_signal=0x806666b "properties-changed")
    at /build/buildd/glib2.0-2.28.4/./gobject/gsignal.c:3077
#14 0x08060cf2 in _dbus_handle_free_desktop_properties_properties_changed (
    proxy=0x88a0690, sender_name=0x88d42d0 ":1.611",
    signal_name=0x88b7f20 "PropertiesChanged", parameters=0x88d3748)
    at freedesktop-interfaces.c:721
#15 free_desktop_properties_proxy_g_signal (proxy=0x88a0690,
    sender_name=0x88d42d0 ":1.611", signal_name=0x88b7f20 "PropertiesChanged",
    parameters=0x88d3748) at freedesktop-interfaces.c:730
#16 0x005836a6 in _gio_marshal_VOID__STRING_STRING_VARIANT (closure=0x8897388,
---Type <return> to continue, or q <return> to quit---
    return_value=0x0, n_param_values=4, param_values=0x88d4680,
    invocation_hint=0xbfcf4110, marshal_data=0x8060ad0)
    at /build/buildd/glib2.0-2.28.4/./gio/gio-marshal.c:775
#17 0x00e63cc7 in g_type_class_meta_marshal (closure=0x8897388,
    return_value=0x0, n_param_values=4, param_values=0x88d4680,
    invocation_hint=0xbfcf4110, marshal_data=0x48)
    at /build/buildd/glib2.0-2.28.4/./gobject/gclosure.c:878
#18 0x00e65372 in g_closure_invoke (closure=0x8897388, return_value=0x0,
    n_param_values=4, param_values=0x88d4680, invocation_hint=0xbfcf4110)
    at /build/buildd/glib2.0-2.28.4/./gobject/gclosure.c:767
#19 0x00e77e45 in signal_emit_unlocked_R (node=0x889ef40, detail=0,
    instance=0x88a0690, emission_return=0x0, instance_and_params=0x88d4680)
    at /build/buildd/glib2.0-2.28.4/./gobject/gsignal.c:3290
#20 0x00e80b29 in g_signal_emit_valist (instance=0x88a0690, signal_id=26,
    detail=0, var_args=0xbfcf42d8 "yW\232")
    at /build/buildd/glib2.0-2.28.4/./gobject/gsignal.c:2983
#21 0x00e80cc2 in g_signal_emit (instance=0x88a0690, signal_id=26, detail=0)
    at /build/buildd/glib2.0-2.28.4/./gobject/gsignal.c:3040
#22 0x00569080 in on_signal_received (connection=0x886d000,
    sender_name=0x88cc1e0 ":1.611",
    object_path=0x888a380 "/org/mpris/MediaPlayer2",
---Type <return> to continue, or q <return> to quit---
    interface_name=0x88b7fe0 "org.freedesktop.DBus.Properties",
    signal_name=0x88d43e8 "PropertiesChanged", parameters=0x88d3748,
    user_data=0x88a0690) at /build/buildd/glib2.0-2.28.4/./gio/gdbusproxy.c:754
#23 0x00557440 in emit_signal_instance_in_idle_cb (data=0x88c3280)
    at /build/buildd/glib2.0-2.28.4/./gio/gdbusconnection.c:3400
#24 0x00d46311 in g_idle_dispatch (source=0x884a940,
    callback=0x5573a0 <emit_signal_instance_in_idle_cb>, user_data=0x88c3280)
    at /build/buildd/glib2.0-2.28.4/./glib/gmain.c:4545
#25 0x00d4aaa8 in g_main_dispatch (context=0x8873028)
    at /build/buildd/glib2.0-2.28.4/./glib/gmain.c:2440
#26 g_main_context_dispatch (context=0x8873028)
    at /build/buildd/glib2.0-2.28.4/./glib/gmain.c:3013
#27 0x00d4b270 in g_main_context_iterate (context=0x8873028, block=14006304,
    dispatch=1, self=<value optimised out>)
    at /build/buildd/glib2.0-2.28.4/./glib/gmain.c:3091
#28 0x00d4b92b in g_main_loop_run (loop=0xb15007f0)
    at /build/buildd/glib2.0-2.28.4/./glib/gmain.c:3299
#29 0x0804d028 in main (argc=1, argv=0xbfcf4584) at sound-service.c:76

The problem is that my generated C code is expecting the dict to be in variant. The interface definition in Vala is type as a hashtable but the C code automatically assumes everything has outer wrapper layer of a variant. Take a look at the rhythmbox or banshee and see what they return over d-feet. its the same code on my side that handles all clients and its just yours that's is crashing my service.