Crash if device is not introspectable
Some devices present themselves with a non-working location in their SSDP answers (e.g. routers advertising a v6 URL over v4 SSDP). This causes a race in manipulating the TreeStore:
==42933== Invalid read of size 8
==42933== at 0x48C75ED: g_node_insert_before (gnode.c:308)
==42933== by 0x48C7451: g_node_insert (gnode.c:263)
==42933== by 0x50C32EC: gtk_tree_store_insert_with_values (gtktreestore.c:1552)
==42933== by 0x40B293: append_state_variables (device-treeview.c:502)
==42933== by 0x40B3FB: append_introspection (device-treeview.c:557)
==42933== by 0x40B50D: got_introspection (device-treeview.c:590)
==42933== by 0x4B83056: g_task_return_now (gtask.c:1259)
==42933== by 0x4B831B9: g_task_return (gtask.c:1328)
==42933== by 0x4B83DD2: g_task_return_pointer (gtask.c:1762)
==42933== by 0x49D6102: get_scpd_document_finished (gupnp-service-info.c:586)
==42933== by 0x4B83056: g_task_return_now (gtask.c:1259)
==42933== by 0x4B831B9: g_task_return (gtask.c:1328)
==42933== by 0x4B83DD2: g_task_return_pointer (gtask.c:1762)
==42933== by 0x4A6811E: send_and_read_splice_ready_cb (soup-session.c:3255)
==42933== by 0x4B83056: g_task_return_now (gtask.c:1259)
==42933== by 0x4B831B9: g_task_return (gtask.c:1328)
==42933== by 0x4B83FED: g_task_return_int (gtask.c:1819)
==42933== by 0x4B55606: async_ready_splice_callback_wrapper (goutputstream.c:1714)
==42933== by 0x4B83056: g_task_return_now (gtask.c:1259)
==42933== by 0x4B831B9: g_task_return (gtask.c:1328)
==42933== by 0x4B83FED: g_task_return_int (gtask.c:1819)
==42933== by 0x4B57A8D: real_splice_async_complete_cb (goutputstream.c:2686)
==42933== by 0x4B57BBE: real_splice_async_close_output_cb (goutputstream.c:2718)
==42933== by 0x4B83056: g_task_return_now (gtask.c:1259)
==42933== by 0x4B831B9: g_task_return (gtask.c:1328)
==42933== by 0x4B841F9: g_task_return_boolean (gtask.c:1874)
==42933== by 0x4B55F0F: async_ready_close_callback_wrapper (goutputstream.c:1943)
==42933== by 0x4B83056: g_task_return_now (gtask.c:1259)
==42933== by 0x4B830C2: complete_in_idle_cb (gtask.c:1273)
==42933== by 0x48BC5F0: g_idle_dispatch (gmain.c:6124)
==42933== by 0x48B940D: g_main_dispatch (gmain.c:3444)
==42933== by 0x48BA361: g_main_context_dispatch (gmain.c:4162)
==42933== by 0x48BA554: g_main_context_iterate (gmain.c:4238)
==42933== by 0x48BA9EE: g_main_loop_run (gmain.c:4438)
==42933== by 0x4F8A75C: gtk_main (gtkmain.c:1329)
==42933== by 0x40D8D2: main (main.c:210)
==42933== Address 0x192a85e0 is 32 bytes inside a block of size 40 free'd
==42933== at 0x48480E4: free (vg_replace_malloc.c:872)
==42933== by 0x48C2A70: g_free (gmem.c:229)
==42933== by 0x48E0194: g_slice_free1 (gslice.c:1185)
==42933== by 0x48C70A9: g_nodes_free (gnode.c:123)
==42933== by 0x48C7098: g_nodes_free (gnode.c:122)
==42933== by 0x48C7098: g_nodes_free (gnode.c:122)
==42933== by 0x48C7133: g_node_destroy (gnode.c:143)
==42933== by 0x50C0E2A: gtk_tree_store_remove (gtktreestore.c:1229)
==42933== by 0x40AD3E: remove_device (device-treeview.c:336)
==42933== by 0x40D5CD: device_proxy_unavailable_cb (main.c:98)
==42933== by 0x4D093D6: g_cclosure_marshal_VOID__OBJECTv (gmarshal.c:1910)
==42933== by 0x4D040EC: _g_closure_invoke_va (gclosure.c:895)
==42933== by 0x4D23523: g_signal_emit_valist (gsignal.c:3456)
==42933== by 0x4D2471F: g_signal_emit (gsignal.c:3606)
==42933== by 0x49C988B: gupnp_control_point_resource_unavailable (gupnp-control-point.c:969)
==42933== by 0x4D08BDF: g_cclosure_marshal_VOID__STRINGv (gmarshal.c:1462)
==42933== by 0x4D04599: g_type_class_meta_marshalv (gclosure.c:1060)
==42933== by 0x4D040EC: _g_closure_invoke_va (gclosure.c:895)
==42933== by 0x4D23523: g_signal_emit_valist (gsignal.c:3456)
==42933== by 0x4D2471F: g_signal_emit (gsignal.c:3606)
==42933== by 0x49FDD85: resource_unavailable (gssdp-resource-browser.c:1023)
==42933== by 0x49FDF7E: resource_available (gssdp-resource-browser.c:812)
==42933== by 0x5D20745: ffi_call_unix64 (unix64.S:105)
==42933== by 0x5D1D4D1: ffi_call_int.lto_priv.0 (ffi64.c:672)
==42933== by 0x4D05EEC: g_cclosure_marshal_generic_va (gclosure.c:1650)
==42933== by 0x4D040EC: _g_closure_invoke_va (gclosure.c:895)
==42933== by 0x4D23523: g_signal_emit_valist (gsignal.c:3456)
==42933== by 0x4D2471F: g_signal_emit (gsignal.c:3606)
==42933== by 0x49FC17A: socket_source_cb (gssdp-client.c:1829)
==42933== by 0x49FC22E: search_socket_source_cb (gssdp-client.c:1941)
==42933== by 0x4B6F195: socket_source_dispatch (gsocket.c:4037)
==42933== by 0x48B940D: g_main_dispatch (gmain.c:3444)
==42933== by 0x48BA361: g_main_context_dispatch (gmain.c:4162)
==42933== by 0x48BA554: g_main_context_iterate (gmain.c:4238)
==42933== by 0x48BA9EE: g_main_loop_run (gmain.c:4438)
==42933== by 0x4F8A75C: gtk_main (gtkmain.c:1329)
==42933== by 0x40D8D2: main (main.c:210)
==42933== Block was alloc'd at
==42933== at 0x484586F: malloc (vg_replace_malloc.c:381)
==42933== by 0x48C2911: g_malloc (gmem.c:130)
==42933== by 0x48DFF59: g_slice_alloc (gslice.c:1074)
==42933== by 0x48DFF98: g_slice_alloc0 (gslice.c:1100)
==42933== by 0x48C704C: g_node_new (gnode.c:110)
==42933== by 0x50C32D1: gtk_tree_store_insert_with_values (gtktreestore.c:1548)
==42933== by 0x40B5D6: append_service_tree (device-treeview.c:618)
==42933== by 0x40B7AA: append_device_tree (device-treeview.c:682)
==42933== by 0x40B72D: append_device_tree (device-treeview.c:672)
==42933== by 0x40B894: append_device (device-treeview.c:709)
==42933== by 0x40D5A6: device_proxy_available_cb (main.c:91)
==42933== by 0x4D093D6: g_cclosure_marshal_VOID__OBJECTv (gmarshal.c:1910)
==42933== by 0x4D040EC: _g_closure_invoke_va (gclosure.c:895)
==42933== by 0x4D23523: g_signal_emit_valist (gsignal.c:3456)
==42933== by 0x4D2471F: g_signal_emit (gsignal.c:3606)
==42933== by 0x49C877F: create_and_report_device_proxy (gupnp-control-point.c:355)
==42933== by 0x49C8B29: process_device_list (gupnp-control-point.c:510)
==42933== by 0x49C8C4A: description_loaded (gupnp-control-point.c:556)
==42933== by 0x49C8E73: got_description_url (gupnp-control-point.c:637)
==42933== by 0x4B83056: g_task_return_now (gtask.c:1259)
==42933== by 0x4B831B9: g_task_return (gtask.c:1328)
==42933== by 0x4B83DD2: g_task_return_pointer (gtask.c:1762)
==42933== by 0x4A6811E: send_and_read_splice_ready_cb (soup-session.c:3255)
==42933== by 0x4B83056: g_task_return_now (gtask.c:1259)
==42933== by 0x4B831B9: g_task_return (gtask.c:1328)
==42933== by 0x4B83FED: g_task_return_int (gtask.c:1819)
==42933== by 0x4B55606: async_ready_splice_callback_wrapper (goutputstream.c:1714)
==42933== by 0x4B83056: g_task_return_now (gtask.c:1259)
==42933== by 0x4B831B9: g_task_return (gtask.c:1328)
==42933== by 0x4B83FED: g_task_return_int (gtask.c:1819)
==42933== by 0x4B57A8D: real_splice_async_complete_cb (goutputstream.c:2686)
==42933== by 0x4B57BBE: real_splice_async_close_output_cb (goutputstream.c:2718)
==42933== by 0x4B83056: g_task_return_now (gtask.c:1259)
==42933== by 0x4B831B9: g_task_return (gtask.c:1328)
==42933== by 0x4B841F9: g_task_return_boolean (gtask.c:1874)
==42933== by 0x4B55F0F: async_ready_close_callback_wrapper (goutputstream.c:1943)
==42933== by 0x4B83056: g_task_return_now (gtask.c:1259)
==42933== by 0x4B830C2: complete_in_idle_cb (gtask.c:1273)
==42933== by 0x48BC5F0: g_idle_dispatch (gmain.c:6124)
==42933== by 0x48B940D: g_main_dispatch (gmain.c:3444)
==42933== by 0x48BA361: g_main_context_dispatch (gmain.c:4162)
==42933== by 0x48BA554: g_main_context_iterate (gmain.c:4238)
==42933== by 0x48BA9EE: g_main_loop_run (gmain.c:4438)
==42933== by 0x4F8A75C: gtk_main (gtkmain.c:1329)
==42933== by 0x40D8D2: main (main.c:210)