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.
Jorg, I think the problem is that you are not wrapping your Metadata dict in a variant.
(gdb) bt sysdeps/ unix/sysv/ linux/raise. c:64 buildd/ glib2.0- 2.28.4/ ./glib/ gvariant- serialiser. c", serialised_ n_children" , buildd/ glib2.0- 2.28.4/ ./glib/ gtestutils. c:1358 serialised_ n_children (serialised=...) buildd/ glib2.0- 2.28.4/ ./glib/ gvariant- serialiser. c:1319 n_children (value=0x88d36b0) buildd/ glib2.0- 2.28.4/ ./glib/ gvariant- core.c: 819 buildd/ glib2.0- 2.28.4/ ./glib/ gvariant. c:2595 dbus_proxy_ get_Metadata (self=0x88a0198) interfaces. c:1280 controller_ clean_metadata (self=0x88a66c8) controller. c:648 controller_ property_ changed_ cb (self=0x88a66c8, source= 0x88cc028 "org.mpris. MediaPlayer2. Player" , properties= 0x88c9690, invalid=0x88c2798, invalid_length1=0) controller. c:517 values= 5, param_values= 0x889d9c8, invocation_ hint=0xbfcf3c30 ) buildd/ glib2.0- 2.28.4/ ./gobject/ gclosure. c:767 emit_unlocked_ R (node=0x88b4bb0, detail=0, 0x88a0690, emission_ return= 0x0, instance_ and_params= 0x889d9c8) buildd/ glib2.0- 2.28.4/ ./gobject/ gsignal. c:3252 emit_valist (instance= 0x88a0690, signal_id=29, buildd/ glib2.0- 2.28.4/ ./gobject/ gsignal. c:2983 emit_by_ name (instance= 0x88a0690, signal= 0x806666b "properties- changed" ) buildd/ glib2.0- 2.28.4/ ./gobject/ gsignal. c:3077 free_desktop_ properties_ properties_ changed ( 0x88a0690, sender_ name=0x88d42d0 ":1.611", name=0x88b7f20 "PropertiesChan ged", parameters= 0x88d3748) interfaces. c:721 properties_ proxy_g_ signal (proxy=0x88a0690, name=0x88d42d0 ":1.611", signal_ name=0x88b7f20 "PropertiesChan ged", 0x88d3748) at freedesktop- interfaces. c:730 VOID__STRING_ STRING_ VARIANT (closure=0x8897388, value=0x0, n_param_values=4, param_values= 0x88d4680, hint=0xbfcf4110 , marshal_ data=0x8060ad0) buildd/ glib2.0- 2.28.4/ ./gio/gio- marshal. c:775 class_meta_ marshal (closure=0x8897388, value=0x0, n_param_values=4, param_values= 0x88d4680, hint=0xbfcf4110 , marshal_data=0x48) buildd/ glib2.0- 2.28.4/ ./gobject/ gclosure. c:878 values= 4, param_values= 0x88d4680, invocation_ hint=0xbfcf4110 ) buildd/ glib2.0- 2.28.4/ ./gobject/ gclosure. c:767 emit_unlocked_ R (node=0x889ef40, detail=0, 0x88a0690, emission_ return= 0x0, instance_ and_params= 0x88d4680) buildd/ glib2.0- 2.28.4/ ./gobject/ gsignal. c:3290 emit_valist (instance= 0x88a0690, signal_id=26, buildd/ glib2.0- 2.28.4/ ./gobject/ gsignal. c:2983 0x88a0690, signal_id=26, detail=0) buildd/ glib2.0- 2.28.4/ ./gobject/ gsignal. c:3040 0x886d000, name=0x88cc1e0 ":1.611", path=0x888a380 "/org/mpris/ MediaPlayer2" , name=0x88b7fe0 "org.freedeskto p.DBus. Properties" , name=0x88d43e8 "PropertiesChan ged", parameters= 0x88d3748, data=0x88a0690) at /build/ buildd/ glib2.0- 2.28.4/ ./gio/gdbusprox y.c:754 instance_ in_idle_ cb (data=0x88c3280) buildd/ glib2.0- 2.28.4/ ./gio/gdbusconn ection. c:3400 0x5573a0 <emit_signal_ instance_ in_idle_ cb>, user_data= 0x88c3280) buildd/ glib2.0- 2.28.4/ ./glib/ gmain.c: 4545 buildd/ glib2.0- 2.28.4/ ./glib/ gmain.c: 2440 context_ dispatch (context=0x8873028) buildd/ glib2.0- 2.28.4/ ./glib/ gmain.c: 3013 context_ iterate (context=0x8873028, block=14006304, buildd/ glib2.0- 2.28.4/ ./glib/ gmain.c: 3091 buildd/ glib2.0- 2.28.4/ ./glib/ gmain.c: 3299
#0 0x00bd0832 in ?? () from /lib/ld-linux.so.2
#1 0x01022e71 in raise (sig=6) at ../nptl/
#2 0x0102634e in abort () at abort.c:92
#3 0x00d723a0 in g_assertion_message (domain=0xd956e6 "GLib",
file=0xddd57c "/build/
line=1319, func=0xddd780 "g_variant_
message=<value optimised out>)
at /build/
#4 0x00d8e328 in g_variant_
at /build/
#5 0x00d8a3d9 in g_variant_
at /build/
#6 0x00d86e6e in g_variant_iter_init (iter=0xbfcf3a04, value=0x88d36b0)
at /build/
#7 0x080572b9 in mpris_player_
at mpris2-
#8 0x0805c261 in mpris2_
at mpris2-
#9 0x0805c780 in mpris2_
interface_
changed_
---Type <return> to continue, or q <return> to quit---
at mpris2-
#10 0x00e65372 in g_closure_invoke (closure=0x88d3188, return_value=0x0,
n_param_
at /build/
#11 0x00e78048 in signal_
instance=
at /build/
#12 0x00e80b29 in g_signal_
detail=0, var_args=0xbfcf3e88 "\230>Ͽ\002")
at /build/
#13 0x00e80e3d in g_signal_
detailed_
at /build/
#14 0x08060cf2 in _dbus_handle_
proxy=
signal_
at freedesktop-
#15 free_desktop_
sender_
parameters=
#16 0x005836a6 in _gio_marshal_
---Type <return> to continue, or q <return> to quit---
return_
invocation_
at /build/
#17 0x00e63cc7 in g_type_
return_
invocation_
at /build/
#18 0x00e65372 in g_closure_invoke (closure=0x8897388, return_value=0x0,
n_param_
at /build/
#19 0x00e77e45 in signal_
instance=
at /build/
#20 0x00e80b29 in g_signal_
detail=0, var_args=0xbfcf42d8 "yW\232")
at /build/
#21 0x00e80cc2 in g_signal_emit (instance=
at /build/
#22 0x00569080 in on_signal_received (connection=
sender_
object_
---Type <return> to continue, or q <return> to quit---
interface_
signal_
user_
#23 0x00557440 in emit_signal_
at /build/
#24 0x00d46311 in g_idle_dispatch (source=0x884a940,
callback=
at /build/
#25 0x00d4aaa8 in g_main_dispatch (context=0x8873028)
at /build/
#26 g_main_
at /build/
#27 0x00d4b270 in g_main_
dispatch=1, self=<value optimised out>)
at /build/
#28 0x00d4b92b in g_main_loop_run (loop=0xb15007f0)
at /build/
#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.