NetworkManager/libnm
Thomas Haller 1bb3ee4c55 libnm: fix another leak when cleaning up NMClient
We now move the deletion of the context-busy-watcher to and idle handler
on the D-Bus GMainContext.

Note that the idle source does not take an additional reference on the
context. Hence, in certain cases it might happen that the context will
be completely unrefed before the idle handler runs. In that case, we
would leak the object.

Avoid that, by taking an additional reference to the GMainContext.

Note that the alternative would be to unref the context-busy-watcher
via the GSource's GDestroyNotify. That is not done, because then the
busy watcher might be unrefed in a different thread. Instead, we want
that to happen for the right context. The only minor downside of this
is that the user now always pays the price and must iterate the context
to fully clean up. But note that the user anyway must be prepared to
iterate the context after NMClient is gone. And that depends on some
unpredictable events that the user cannot control. That means, either
the user handles this correctly already, or the problem anyway exists
(randomly).

Of course all of the discussed "problems" are very specific. In practice, the
users uses the g_main_context_default() instance and anyway will either
keep iterating it or quit the process after the NMClient instance goes
away.

(cherry picked from commit c2f8400e66)
2020-01-16 14:46:02 +01:00
..
tests libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
generate-plugin-docs.pl all: unify format of our Copyright source code comments 2019-10-02 17:03:52 +02:00
generate-setting-docs.py all: unify format of our Copyright source code comments 2019-10-02 17:03:52 +02:00
libnm.pc.in libnm,pkg-config: provide a variable with VPN service directory 2015-08-19 15:13:11 +02:00
libnm.ver libnm: add nm_client_get_capabilities() to expose server Capabilities 2019-12-24 14:37:46 +01:00
meson.build libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
NetworkManager.h all: unify format of our Copyright source code comments 2019-10-02 17:03:52 +02:00
nm-access-point.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-access-point.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-active-connection.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-active-connection.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-autoptr.h all: unify format of our Copyright source code comments 2019-10-02 17:03:52 +02:00
nm-checkpoint.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-checkpoint.h all: unify format of our Copyright source code comments 2019-10-02 17:03:52 +02:00
nm-client.c libnm: fix another leak when cleaning up NMClient 2020-01-16 14:46:02 +01:00
nm-client.h libnm: add nm_client_get_capabilities() to expose server Capabilities 2019-12-24 14:37:46 +01:00
nm-dbus-helpers.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-dbus-helpers.h libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-6lowpan.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-6lowpan.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-adsl.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-adsl.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-bond.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-bond.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-bridge.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-bridge.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-bt.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-bt.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-dummy.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-dummy.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-ethernet.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-ethernet.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-generic.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-generic.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-infiniband.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-infiniband.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-ip-tunnel.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-ip-tunnel.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-macsec.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-macsec.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-macvlan.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-macvlan.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-modem.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-modem.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-olpc-mesh.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-olpc-mesh.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-ovs-bridge.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-ovs-bridge.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-ovs-interface.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-ovs-interface.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-ovs-port.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-ovs-port.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-ppp.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-ppp.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +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 libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-team.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-tun.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-tun.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-vlan.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-vlan.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-vxlan.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-vxlan.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-wifi-p2p.c libnm: fix interface and object path for P2P StartFind/StopFind calls 2020-01-15 12:03:02 +01:00
nm-device-wifi-p2p.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-wifi.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-wifi.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-wimax.c libnm: retire deprecated WiMAX NMObject types 2019-10-23 15:31:51 +02:00
nm-device-wimax.h libnm: retire deprecated WiMAX NMObject types 2019-10-23 15:31:51 +02:00
nm-device-wireguard.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-wireguard.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device-wpan.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-device-wpan.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-device.c libnm: add assertion for object returned by nm_device_get_active_connection() 2019-11-28 12:47:07 +01:00
nm-device.h libnm: export interface flags 2019-11-22 10:18:26 +01:00
nm-dhcp-config.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-dhcp-config.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-dhcp4-config.c libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-dhcp4-config.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-dhcp6-config.c libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-dhcp6-config.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-dns-manager.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-dns-manager.h libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +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 libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-ip-config.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-ip4-config.c libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-ip4-config.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-ip6-config.c libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-ip6-config.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-libnm-utils.c libnm: handle boxed GType properties in nm_utils_g_param_spec_is_default() 2019-12-24 14:37:46 +01:00
nm-libnm-utils.h libnm: allow using _LOGx() macros in libnm 2019-12-16 18:54:12 +01:00
nm-object-private.h libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-object.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-object.h libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-remote-connection-private.h all: unify format of our Copyright source code comments 2019-10-02 17:03:52 +02:00
nm-remote-connection.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-remote-connection.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-secret-agent-old.c libnm/secret-agent: remove unused variable 2019-12-17 09:00:00 +01:00
nm-secret-agent-old.h all: unify format of our Copyright source code comments 2019-10-02 17:03:52 +02:00
nm-types.h all: unify format of our Copyright source code comments 2019-10-02 17:03:52 +02:00
nm-vpn-connection.c libnm: refactor caching of D-Bus objects in NMClient 2019-11-25 15:08:00 +01:00
nm-vpn-connection.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-vpn-editor.c all: unify format of our Copyright source code comments 2019-10-02 17:03:52 +02:00
nm-vpn-editor.h all: unify format of our Copyright source code comments 2019-10-02 17:03:52 +02:00
nm-vpn-plugin-old.c libnm: use obj_properties array in libnm and cleanup 2019-10-18 22:09:18 +02:00
nm-vpn-plugin-old.h all: unify format of our Copyright source code comments 2019-10-02 17:03:52 +02:00
nm-vpn-service-plugin.c libnm: use obj_properties array in libnm and cleanup 2019-10-18 22:09:18 +02:00
nm-vpn-service-plugin.h all: unify format of our Copyright source code comments 2019-10-02 17:03:52 +02:00
nm-wifi-p2p-peer.c libnm: ignore "Groups" property of WifiP2PPeer 2020-01-15 14:02:22 +01:00
nm-wifi-p2p-peer.h libnm: hide GObject structs from public API and embed private data 2019-10-22 10:58:52 +02:00
nm-wimax-nsp.c libnm: retire deprecated WiMAX NMObject types 2019-10-23 15:31:51 +02:00
nm-wimax-nsp.h libnm: retire deprecated WiMAX NMObject types 2019-10-23 15:31:51 +02:00