NetworkManager/libnm
Thomas Haller 6f85d3e0b9 libnm: fix crash creating checkpoint during find_checkpoint_info()
Now that the D-Bus signals in server are reordered, creating
a checkpoint in libnm crashes:

  $ examples/python/gi/checkpoint.py create 4

    #0  0x00007ffff6d011ee in __strcmp_sse2_unaligned () at /lib64/libc.so.6
    #1  0x00007fffeb611c90 in find_checkpoint_info (manager=manager@entry=0x5555559e5110 [NMManager], path=0x7fffdc0092f0 "/org/freedesktop/NetworkManager/Checkpoint/6")
        at libnm/nm-manager.c:153
    #2  0x00007fffeb611d8f in checkpoint_added (manager=0x5555559e5110 [NMManager], checkpoint=checkpoint@entry=0x555555a122d0 [NMCheckpoint]) at libnm/nm-manager.c:1194
    #3  0x00007fffef7db929 in g_cclosure_marshal_VOID__OBJECTv (closure=0x5555559e4b30, return_value=<optimized out>, instance=<optimized out>, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x5555559e2fc0) at gmarshal.c:2102
    #4  0x00007fffef7d8976 in _g_closure_invoke_va (closure=0x5555559e4b30, return_value=0x0, instance=0x5555559e5110, args=0x7fffffffc1c8, n_params=1, param_types=0x5555559e2fc0)
        at gclosure.c:867
    #5  0x00007fffef7f3ff4 in g_signal_emit_valist (instance=instance@entry=0x5555559e5110, signal_id=signal_id@entry=97, detail=0, var_args=var_args@entry=0x7fffffffc1c8) at gsignal.c:3300
    #6  0x00007fffef7f4b48 in g_signal_emit_by_name (instance=instance@entry=0x5555559e5110, detailed_signal=detailed_signal@entry=0x7fffffffc310 "checkpoint-added") at gsignal.c:3487
    #7  0x00007fffeb6156d1 in deferred_notify_cb (data=0x5555559e5110) at libnm/nm-object.c:219
    #8  0x00007fffeb615ae7 in object_property_maybe_complete (self=0x5555559e5110 [NMManager]) at libnm/nm-object.c:555
    #9  0x00007fffeb615e5d in object_created (obj=<optimized out>, path=<optimized out>, user_data=<optimized out>) at libnm/nm-object.c:576
    #10 0x00007fffeb61648b in handle_object_array_property (pi=<optimized out>, value=0x7fffdc075070, property_name=0x7fffeb67f117 "checkpoints", self=0x5555559e5110 [NMManager])
        at libnm/nm-object.c:671
    #11 0x00007fffeb61648b in handle_property_changed (self=self@entry=0x5555559e5110 [NMManager], dbus_name=<optimized out>, value=<optimized out>) at libnm/nm-object.c:740
    #12 0x00007fffeb6166e9 in properties_changed (proxy=<optimized out>, changed_properties=<optimized out>, invalidated_properties=<optimized out>, user_data=0x5555559e5110)
        at libnm/nm-object.c:772
    ...

That is, because NetworkManager now first emits signals that the checkpoint
object was created, before answering the D-Bus request. That makes more
sense, but leads to this crash.

The ugliness of how libnm handles object visibility is considerable.
libnm hides objects until they are fully initialized. So, when
the async create-checkpoint operation returns, the object might not
yet be ready to be exposed. We need to delay the result. It would be
better if the API would simply return the created path.
2018-04-04 14:02:13 +02:00
..
fake-typelib build: add initial support for meson build system 2017-12-13 15:48:50 +01:00
tests libnm/tests: fix compilation of test-general 2018-02-26 14:42:09 +01:00
generate-plugin-docs.pl build: Make generate-plugin-docs.pl independent of autotools 2017-12-16 15:12:33 +01:00
generate-setting-docs.py build: library paths as parameters for generate-settings-docs.py 2017-12-14 15:18:48 +01:00
libnm.pc.in libnm,pkg-config: provide a variable with VPN service directory 2015-08-19 15:13:11 +02:00
libnm.ver wifi: add support for FILS 2018-01-16 15:01:59 +01:00
meson.build gobject-introspection: made several fixes to the annotations 2018-03-26 12:45:49 +02:00
NetworkManager.h libnm: add nm-autoptr.h header 2018-03-27 10:36:12 +02:00
nm-access-point.c all: replace non-leading tabs with spaces 2018-02-07 13:32:04 +01:00
nm-access-point.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-active-connection.c gobject-introspection: made several fixes to the annotations 2018-03-26 12:45:49 +02:00
nm-active-connection.h libnm: add NMActivationStateFlags 2017-10-05 11:50:31 +02:00
nm-autoptr.h libnm: don't use GTK-Doc comment in nm-autoptr.h 2018-03-28 17:51:36 +02:00
nm-checkpoint.c gobject-introspection: made several fixes to the annotations 2018-03-26 12:45:49 +02:00
nm-checkpoint.h libnm: add checkpoint support 2017-11-09 10:12:30 +01:00
nm-client.c gobject-introspection: made several fixes to the annotations 2018-03-26 12:45:49 +02:00
nm-client.h libnm: add checkpoint support 2017-11-09 10:12:30 +01:00
nm-dbus-helpers.c Add calls to g_simple_async_result_set_check_cancellable 2018-03-08 14:52:45 +01:00
nm-dbus-helpers.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-device-adsl.c libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-device-adsl.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-bond.c gobject-introspection: made several fixes to the annotations 2018-03-26 12:45:49 +02:00
nm-device-bond.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-bridge.c gobject-introspection: made several fixes to the annotations 2018-03-26 12:45:49 +02:00
nm-device-bridge.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-bt.c all: change handling of connection.type for bluetooth NAP and in general 2017-06-07 09:07:17 +02:00
nm-device-bt.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-dummy.c libnm: add 'hw-address' property to NMDeviceDummy 2017-06-30 22:04:03 +02:00
nm-device-dummy.h libnm: add 'hw-address' property to NMDeviceDummy 2017-06-30 22:04:03 +02:00
nm-device-ethernet.c libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-device-ethernet.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-generic.c libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-device-generic.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-infiniband.c libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-device-infiniband.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-ip-tunnel.c ip-tunnel: add support for tunnel flags 2018-01-05 18:25:08 +01:00
nm-device-ip-tunnel.h ip-tunnel: add support for tunnel flags 2018-01-05 18:25:08 +01:00
nm-device-macsec.c libnm: (trivial): add missing return description in comment block 2017-01-17 10:34:16 +01:00
nm-device-macsec.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-macvlan.c libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-device-macvlan.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-modem.c libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-device-modem.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-olpc-mesh.c libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-device-olpc-mesh.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-ovs-bridge.c libnm: add support for ovs-bridge devices 2017-10-30 17:40:09 +01:00
nm-device-ovs-bridge.h libnm: add support for ovs-bridge devices 2017-10-30 17:40:09 +01:00
nm-device-ovs-interface.c libnm: add support for ovs-interface devices 2017-10-30 17:40:08 +01:00
nm-device-ovs-interface.h libnm: add support for ovs-interface devices 2017-10-30 17:40:08 +01:00
nm-device-ovs-port.c libnm: add support for ovs-port devices 2017-10-30 17:40:09 +01:00
nm-device-ovs-port.h libnm: add support for ovs-port devices 2017-10-30 17:40:09 +01:00
nm-device-ppp.c device: add NMDevicePPP 2017-08-05 08:03:15 +02:00
nm-device-ppp.h device: add NMDevicePPP 2017-08-05 08:03:15 +02:00
nm-device-private.h libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-device-team.c gobject-introspection: made several fixes to the annotations 2018-03-26 12:45:49 +02:00
nm-device-team.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-tun.c libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-device-tun.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-vlan.c libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-device-vlan.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-vxlan.c libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-device-vxlan.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-wifi.c gobject-introspection: made several fixes to the annotations 2018-03-26 12:45:49 +02:00
nm-device-wifi.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device-wimax.c gobject-introspection: made several fixes to the annotations 2018-03-26 12:45:49 +02:00
nm-device-wimax.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-device.c gobject-introspection: made several fixes to the annotations 2018-03-26 12:45:49 +02:00
nm-device.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-dhcp-config.c libnm: don't use deprecated tags for GOobject introspection 2018-03-26 12:46:22 +02:00
nm-dhcp-config.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-dhcp4-config.c libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-dhcp4-config.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-dhcp6-config.c libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-dhcp6-config.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-dns-manager.c libnm: fix memory leak in DNS manager 2017-04-20 14:33:31 +02:00
nm-dns-manager.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-enum-types.c.template build: use template files for enum types' sources generation 2017-12-18 11:25:06 +01:00
nm-enum-types.h.template build: use template files for enum types' sources generation 2017-12-18 11:25:06 +01:00
nm-ip-config.c gobject-introspection: made several fixes to the annotations 2018-03-26 12:45:49 +02:00
nm-ip-config.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-ip4-config.c libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-ip4-config.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-ip6-config.c libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-ip6-config.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-libnm-utils.c libnm/utils: drop part after a dash in product name 2018-02-23 19:47:19 +01:00
nm-libnm-utils.h libnm/utils: extend the product fixup phrase list 2018-02-23 19:47:19 +01:00
nm-manager.c libnm: fix crash creating checkpoint during find_checkpoint_info() 2018-04-04 14:02:13 +02:00
nm-manager.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-object-private.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-object.c Add calls to g_simple_async_result_set_check_cancellable 2018-03-08 14:52:45 +01:00
nm-object.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-remote-connection-private.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-remote-connection.c Add calls to g_simple_async_result_set_check_cancellable 2018-03-08 14:52:45 +01:00
nm-remote-connection.h libnm: add nm_remote_connection_update2() 2017-12-05 19:57:24 +01:00
nm-remote-settings.c Add calls to g_simple_async_result_set_check_cancellable 2018-03-08 14:52:45 +01:00
nm-remote-settings.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-secret-agent-old.c libnm: don't use deprecated tags for GOobject introspection 2018-03-26 12:46:22 +02:00
nm-secret-agent-old.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-types.h libnm: add checkpoint support 2017-11-09 10:12:30 +01:00
nm-vpn-connection.c {vpn,remote}-connection: disconnect signal handlers when disposed 2017-09-22 14:16:50 +02:00
nm-vpn-connection.h libnm/nm-vpn-connection: un-deprecate the NMVpnStateReason use in a header 2017-03-20 14:51:11 +01:00
nm-vpn-editor.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-vpn-editor.h all: replace non-leading tabs with spaces 2018-02-07 13:32:04 +01:00
nm-vpn-plugin-old.c libnm/vpn-plugin: avoid bad function pointer type casts 2018-02-08 17:11:46 +01:00
nm-vpn-plugin-old.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-vpn-service-plugin.c libnm/vpn-plugin: avoid bad function pointer type casts 2018-02-08 17:11:46 +01:00
nm-vpn-service-plugin.h libnm: add nm_vpn_service_plugin_shutdown() API 2018-01-16 14:39:09 +01:00
nm-wimax-nsp.c libnm: use the o.fd.DBus.ObjectManager API for object management 2016-11-10 16:48:48 +01:00
nm-wimax-nsp.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00