summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2018-06-24 17:41:02 +0200
committerThomas Haller <thaller@redhat.com>2018-06-25 09:00:16 +0200
commit1dc0d3c6ed5e6d4ba513ee67f7b7ebd944273b9d (patch)
tree9c359577bd28d4c65b58561f9b16db215ea0b61c
parentf3394b1eba9b8ba75e63da0af9d11399f27e5be9 (diff)
downloadNetworkManager-th/libnm-register-settings.tar.gz
libnm: avoid constructor function for registering NMSetting typesth/libnm-register-settings
constructor functions are ugly, because code is running before main() starts. Instead, as the registration code for NMSetting types is insid the GType constructor, we just need to ensure at the right place, that the GType was created. The right place here is _register_settings_ensure_inited(), because that is called before we need the registration information.
-rw-r--r--libnm-core/nm-setting-8021x.c1
-rw-r--r--libnm-core/nm-setting-adsl.c1
-rw-r--r--libnm-core/nm-setting-bluetooth.c1
-rw-r--r--libnm-core/nm-setting-bond.c1
-rw-r--r--libnm-core/nm-setting-bridge-port.c1
-rw-r--r--libnm-core/nm-setting-bridge.c1
-rw-r--r--libnm-core/nm-setting-cdma.c1
-rw-r--r--libnm-core/nm-setting-connection.c1
-rw-r--r--libnm-core/nm-setting-dcb.c1
-rw-r--r--libnm-core/nm-setting-dummy.c1
-rw-r--r--libnm-core/nm-setting-generic.c1
-rw-r--r--libnm-core/nm-setting-gsm.c1
-rw-r--r--libnm-core/nm-setting-infiniband.c1
-rw-r--r--libnm-core/nm-setting-ip-tunnel.c1
-rw-r--r--libnm-core/nm-setting-ip4-config.c1
-rw-r--r--libnm-core/nm-setting-ip6-config.c1
-rw-r--r--libnm-core/nm-setting-macsec.c1
-rw-r--r--libnm-core/nm-setting-macvlan.c1
-rw-r--r--libnm-core/nm-setting-olpc-mesh.c1
-rw-r--r--libnm-core/nm-setting-ovs-bridge.c1
-rw-r--r--libnm-core/nm-setting-ovs-interface.c1
-rw-r--r--libnm-core/nm-setting-ovs-patch.c1
-rw-r--r--libnm-core/nm-setting-ovs-port.c1
-rw-r--r--libnm-core/nm-setting-ppp.c1
-rw-r--r--libnm-core/nm-setting-pppoe.c1
-rw-r--r--libnm-core/nm-setting-private.h5
-rw-r--r--libnm-core/nm-setting-proxy.c1
-rw-r--r--libnm-core/nm-setting-serial.c1
-rw-r--r--libnm-core/nm-setting-tc-config.c1
-rw-r--r--libnm-core/nm-setting-team-port.c1
-rw-r--r--libnm-core/nm-setting-team.c1
-rw-r--r--libnm-core/nm-setting-tun.c1
-rw-r--r--libnm-core/nm-setting-user.c1
-rw-r--r--libnm-core/nm-setting-vlan.c1
-rw-r--r--libnm-core/nm-setting-vpn.c1
-rw-r--r--libnm-core/nm-setting-vxlan.c1
-rw-r--r--libnm-core/nm-setting-wimax.c1
-rw-r--r--libnm-core/nm-setting-wired.c1
-rw-r--r--libnm-core/nm-setting-wireless-security.c1
-rw-r--r--libnm-core/nm-setting-wireless.c1
-rw-r--r--libnm-core/nm-setting.c95
41 files changed, 82 insertions, 57 deletions
diff --git a/libnm-core/nm-setting-8021x.c b/libnm-core/nm-setting-8021x.c
index 3b4240e64d..bf9c418096 100644
--- a/libnm-core/nm-setting-8021x.c
+++ b/libnm-core/nm-setting-8021x.c
@@ -62,7 +62,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSetting8021x, nm_setting_802_1x, NM_TYPE_SETTING,
_nm_register_setting (802_1X, NM_SETTING_PRIORITY_HW_AUX))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_802_1X)
#define NM_SETTING_802_1X_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_802_1X, NMSetting8021xPrivate))
diff --git a/libnm-core/nm-setting-adsl.c b/libnm-core/nm-setting-adsl.c
index c2eb5db419..278efe780e 100644
--- a/libnm-core/nm-setting-adsl.c
+++ b/libnm-core/nm-setting-adsl.c
@@ -39,7 +39,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingAdsl, nm_setting_adsl, NM_TYPE_SETTING,
_nm_register_setting (ADSL, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_ADSL)
#define NM_SETTING_ADSL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_ADSL, NMSettingAdslPrivate))
diff --git a/libnm-core/nm-setting-bluetooth.c b/libnm-core/nm-setting-bluetooth.c
index 5b6ef3eb97..21401489c5 100644
--- a/libnm-core/nm-setting-bluetooth.c
+++ b/libnm-core/nm-setting-bluetooth.c
@@ -45,7 +45,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingBluetooth, nm_setting_bluetooth, NM_TYPE_SETTING,
_nm_register_setting (BLUETOOTH, NM_SETTING_PRIORITY_HW_NON_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_BLUETOOTH)
#define NM_SETTING_BLUETOOTH_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_BLUETOOTH, NMSettingBluetoothPrivate))
diff --git a/libnm-core/nm-setting-bond.c b/libnm-core/nm-setting-bond.c
index 9b4b364162..f450921f99 100644
--- a/libnm-core/nm-setting-bond.c
+++ b/libnm-core/nm-setting-bond.c
@@ -59,7 +59,6 @@ typedef struct {
G_DEFINE_TYPE_WITH_CODE (NMSettingBond, nm_setting_bond, NM_TYPE_SETTING,
_nm_register_setting (BOND, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_BOND)
#define NM_SETTING_BOND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_BOND, NMSettingBondPrivate))
diff --git a/libnm-core/nm-setting-bridge-port.c b/libnm-core/nm-setting-bridge-port.c
index 3fc0e87343..9ca478c8d3 100644
--- a/libnm-core/nm-setting-bridge-port.c
+++ b/libnm-core/nm-setting-bridge-port.c
@@ -42,7 +42,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingBridgePort, nm_setting_bridge_port, NM_TYPE_SETTING,
_nm_register_setting (BRIDGE_PORT, NM_SETTING_PRIORITY_AUX))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_BRIDGE_PORT)
#define NM_SETTING_BRIDGE_PORT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_BRIDGE_PORT, NMSettingBridgePortPrivate))
diff --git a/libnm-core/nm-setting-bridge.c b/libnm-core/nm-setting-bridge.c
index 112b499f31..1011dc9d53 100644
--- a/libnm-core/nm-setting-bridge.c
+++ b/libnm-core/nm-setting-bridge.c
@@ -40,7 +40,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingBridge, nm_setting_bridge, NM_TYPE_SETTING,
_nm_register_setting (BRIDGE, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_BRIDGE)
#define NM_SETTING_BRIDGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_BRIDGE, NMSettingBridgePrivate))
diff --git a/libnm-core/nm-setting-cdma.c b/libnm-core/nm-setting-cdma.c
index 6317895159..bf606f9022 100644
--- a/libnm-core/nm-setting-cdma.c
+++ b/libnm-core/nm-setting-cdma.c
@@ -39,7 +39,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingCdma, nm_setting_cdma, NM_TYPE_SETTING,
_nm_register_setting (CDMA, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_CDMA)
#define NM_SETTING_CDMA_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_CDMA, NMSettingCdmaPrivate))
diff --git a/libnm-core/nm-setting-connection.c b/libnm-core/nm-setting-connection.c
index 2649838c43..d8034d31ad 100644
--- a/libnm-core/nm-setting-connection.c
+++ b/libnm-core/nm-setting-connection.c
@@ -47,7 +47,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingConnection, nm_setting_connection, NM_TYPE_SETTING,
_nm_register_setting (CONNECTION, NM_SETTING_PRIORITY_CONNECTION))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_CONNECTION)
#define NM_SETTING_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_CONNECTION, NMSettingConnectionPrivate))
diff --git a/libnm-core/nm-setting-dcb.c b/libnm-core/nm-setting-dcb.c
index 491d915131..55e11d6220 100644
--- a/libnm-core/nm-setting-dcb.c
+++ b/libnm-core/nm-setting-dcb.c
@@ -42,7 +42,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingDcb, nm_setting_dcb, NM_TYPE_SETTING,
_nm_register_setting (DCB, NM_SETTING_PRIORITY_HW_AUX))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_DCB)
#define NM_SETTING_DCB_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_DCB, NMSettingDcbPrivate))
diff --git a/libnm-core/nm-setting-dummy.c b/libnm-core/nm-setting-dummy.c
index 4b3c41f03a..38c361f198 100644
--- a/libnm-core/nm-setting-dummy.c
+++ b/libnm-core/nm-setting-dummy.c
@@ -36,7 +36,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingDummy, nm_setting_dummy, NM_TYPE_SETTING,
_nm_register_setting (DUMMY, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_DUMMY)
/**
* nm_setting_dummy_new:
diff --git a/libnm-core/nm-setting-generic.c b/libnm-core/nm-setting-generic.c
index 96f26ac2a1..0c85d448ce 100644
--- a/libnm-core/nm-setting-generic.c
+++ b/libnm-core/nm-setting-generic.c
@@ -38,7 +38,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingGeneric, nm_setting_generic, NM_TYPE_SETTING,
_nm_register_setting (GENERIC, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_GENERIC)
#define NM_SETTING_GENERIC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_GENERIC, NMSettingGenericPrivate))
diff --git a/libnm-core/nm-setting-gsm.c b/libnm-core/nm-setting-gsm.c
index 3011d91783..b1ab193aa1 100644
--- a/libnm-core/nm-setting-gsm.c
+++ b/libnm-core/nm-setting-gsm.c
@@ -40,7 +40,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingGsm, nm_setting_gsm, NM_TYPE_SETTING,
_nm_register_setting (GSM, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_GSM)
#define NM_SETTING_GSM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_GSM, NMSettingGsmPrivate))
diff --git a/libnm-core/nm-setting-infiniband.c b/libnm-core/nm-setting-infiniband.c
index 8c49849a7b..b22a260e5e 100644
--- a/libnm-core/nm-setting-infiniband.c
+++ b/libnm-core/nm-setting-infiniband.c
@@ -39,7 +39,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingInfiniband, nm_setting_infiniband, NM_TYPE_SETTING,
_nm_register_setting (INFINIBAND, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_INFINIBAND)
#define NM_SETTING_INFINIBAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_INFINIBAND, NMSettingInfinibandPrivate))
diff --git a/libnm-core/nm-setting-ip-tunnel.c b/libnm-core/nm-setting-ip-tunnel.c
index c9cb97dfe2..a482ba2bbd 100644
--- a/libnm-core/nm-setting-ip-tunnel.c
+++ b/libnm-core/nm-setting-ip-tunnel.c
@@ -32,7 +32,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingIPTunnel, nm_setting_ip_tunnel, NM_TYPE_SETTING,
_nm_register_setting (IP_TUNNEL, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_IP_TUNNEL)
#define NM_SETTING_IP_TUNNEL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_IP_TUNNEL, NMSettingIPTunnelPrivate))
diff --git a/libnm-core/nm-setting-ip4-config.c b/libnm-core/nm-setting-ip4-config.c
index 0c668d8c02..c7d80a9fdc 100644
--- a/libnm-core/nm-setting-ip4-config.c
+++ b/libnm-core/nm-setting-ip4-config.c
@@ -52,7 +52,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingIP4Config, nm_setting_ip4_config, NM_TYPE_SETTING_IP_CONFIG,
_nm_register_setting (IP4_CONFIG, NM_SETTING_PRIORITY_IP))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_IP4_CONFIG)
#define NM_SETTING_IP4_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_IP4_CONFIG, NMSettingIP4ConfigPrivate))
diff --git a/libnm-core/nm-setting-ip6-config.c b/libnm-core/nm-setting-ip6-config.c
index 808c88a763..d483d1921a 100644
--- a/libnm-core/nm-setting-ip6-config.c
+++ b/libnm-core/nm-setting-ip6-config.c
@@ -54,7 +54,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingIP6Config, nm_setting_ip6_config, NM_TYPE_SETTING_IP_CONFIG,
_nm_register_setting (IP6_CONFIG, NM_SETTING_PRIORITY_IP))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_IP6_CONFIG)
#define NM_SETTING_IP6_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_IP6_CONFIG, NMSettingIP6ConfigPrivate))
diff --git a/libnm-core/nm-setting-macsec.c b/libnm-core/nm-setting-macsec.c
index 92ebafa625..aca6d6cf70 100644
--- a/libnm-core/nm-setting-macsec.c
+++ b/libnm-core/nm-setting-macsec.c
@@ -42,7 +42,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingMacsec, nm_setting_macsec, NM_TYPE_SETTING,
_nm_register_setting (MACSEC, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_MACSEC)
#define NM_SETTING_MACSEC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_MACSEC, NMSettingMacsecPrivate))
diff --git a/libnm-core/nm-setting-macvlan.c b/libnm-core/nm-setting-macvlan.c
index 6fea8b0da6..b3934bb58d 100644
--- a/libnm-core/nm-setting-macvlan.c
+++ b/libnm-core/nm-setting-macvlan.c
@@ -41,7 +41,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingMacvlan, nm_setting_macvlan, NM_TYPE_SETTING,
_nm_register_setting (MACVLAN, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_MACVLAN)
#define NM_SETTING_MACVLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_MACVLAN, NMSettingMacvlanPrivate))
diff --git a/libnm-core/nm-setting-olpc-mesh.c b/libnm-core/nm-setting-olpc-mesh.c
index 783d143f75..13ba22f0d0 100644
--- a/libnm-core/nm-setting-olpc-mesh.c
+++ b/libnm-core/nm-setting-olpc-mesh.c
@@ -41,7 +41,6 @@ static void nm_setting_olpc_mesh_init (NMSettingOlpcMesh *setting);
G_DEFINE_TYPE_WITH_CODE (NMSettingOlpcMesh, nm_setting_olpc_mesh, NM_TYPE_SETTING,
_nm_register_setting (OLPC_MESH, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_OLPC_MESH)
#define NM_SETTING_OLPC_MESH_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_OLPC_MESH, NMSettingOlpcMeshPrivate))
diff --git a/libnm-core/nm-setting-ovs-bridge.c b/libnm-core/nm-setting-ovs-bridge.c
index fbae95d0c9..b379a9fc86 100644
--- a/libnm-core/nm-setting-ovs-bridge.c
+++ b/libnm-core/nm-setting-ovs-bridge.c
@@ -63,7 +63,6 @@ struct _NMSettingOvsBridgeClass {
G_DEFINE_TYPE_WITH_CODE (NMSettingOvsBridge, nm_setting_ovs_bridge, NM_TYPE_SETTING,
_nm_register_setting (OVS_BRIDGE, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_OVS_BRIDGE)
/*****************************************************************************/
diff --git a/libnm-core/nm-setting-ovs-interface.c b/libnm-core/nm-setting-ovs-interface.c
index 73e1cfc6ae..bdcfc1cf1e 100644
--- a/libnm-core/nm-setting-ovs-interface.c
+++ b/libnm-core/nm-setting-ovs-interface.c
@@ -56,7 +56,6 @@ struct _NMSettingOvsInterfaceClass {
G_DEFINE_TYPE_WITH_CODE (NMSettingOvsInterface, nm_setting_ovs_interface, NM_TYPE_SETTING,
_nm_register_setting (OVS_INTERFACE, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_OVS_INTERFACE)
/*****************************************************************************/
diff --git a/libnm-core/nm-setting-ovs-patch.c b/libnm-core/nm-setting-ovs-patch.c
index 3689aecf8c..1d6e7efdf3 100644
--- a/libnm-core/nm-setting-ovs-patch.c
+++ b/libnm-core/nm-setting-ovs-patch.c
@@ -57,7 +57,6 @@ struct _NMSettingOvsPatchClass {
G_DEFINE_TYPE_WITH_CODE (NMSettingOvsPatch, nm_setting_ovs_patch, NM_TYPE_SETTING,
_nm_register_setting (OVS_PATCH, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_OVS_PATCH)
/*****************************************************************************/
diff --git a/libnm-core/nm-setting-ovs-port.c b/libnm-core/nm-setting-ovs-port.c
index 72722b1571..dc84b9c6d2 100644
--- a/libnm-core/nm-setting-ovs-port.c
+++ b/libnm-core/nm-setting-ovs-port.c
@@ -67,7 +67,6 @@ struct _NMSettingOvsPortClass {
G_DEFINE_TYPE_WITH_CODE (NMSettingOvsPort, nm_setting_ovs_port, NM_TYPE_SETTING,
_nm_register_setting (OVS_PORT, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_OVS_PORT)
/*****************************************************************************/
diff --git a/libnm-core/nm-setting-ppp.c b/libnm-core/nm-setting-ppp.c
index 32900c8463..4702d8a042 100644
--- a/libnm-core/nm-setting-ppp.c
+++ b/libnm-core/nm-setting-ppp.c
@@ -37,7 +37,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingPpp, nm_setting_ppp, NM_TYPE_SETTING,
_nm_register_setting (PPP, NM_SETTING_PRIORITY_AUX))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_PPP)
#define NM_SETTING_PPP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_PPP, NMSettingPppPrivate))
diff --git a/libnm-core/nm-setting-pppoe.c b/libnm-core/nm-setting-pppoe.c
index d7a1a0db26..da5bfc9d0c 100644
--- a/libnm-core/nm-setting-pppoe.c
+++ b/libnm-core/nm-setting-pppoe.c
@@ -40,7 +40,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingPppoe, nm_setting_pppoe, NM_TYPE_SETTING,
_nm_register_setting (PPPOE, NM_SETTING_PRIORITY_AUX))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_PPPOE)
#define NM_SETTING_PPPOE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_PPPOE, NMSettingPppoePrivate))
diff --git a/libnm-core/nm-setting-private.h b/libnm-core/nm-setting-private.h
index 863ea9f3b5..49bf963dda 100644
--- a/libnm-core/nm-setting-private.h
+++ b/libnm-core/nm-setting-private.h
@@ -85,11 +85,6 @@ gboolean _nm_setting_clear_secrets_with_flags (NMSetting *setting,
*/
#define NM_SETTING_PARAM_REAPPLY_IMMEDIATELY (1 << (6 + G_PARAM_USER_SHIFT))
-/* Ensure the setting's GType is registered at library load time */
-#define NM_SETTING_REGISTER_TYPE(x) \
-static void __attribute__((constructor)) register_setting (void) \
-{ g_type_ensure (x); }
-
GVariant *_nm_setting_get_deprecated_virtual_interface_name (NMSetting *setting,
NMConnection *connection,
const char *property);
diff --git a/libnm-core/nm-setting-proxy.c b/libnm-core/nm-setting-proxy.c
index 58a2208031..c32abd824e 100644
--- a/libnm-core/nm-setting-proxy.c
+++ b/libnm-core/nm-setting-proxy.c
@@ -41,7 +41,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingProxy, nm_setting_proxy, NM_TYPE_SETTING,
_nm_register_setting (PROXY, NM_SETTING_PRIORITY_IP))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_PROXY)
#define NM_SETTING_PROXY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_PROXY, NMSettingProxyPrivate))
diff --git a/libnm-core/nm-setting-serial.c b/libnm-core/nm-setting-serial.c
index e86988b5b4..51551835b2 100644
--- a/libnm-core/nm-setting-serial.c
+++ b/libnm-core/nm-setting-serial.c
@@ -39,7 +39,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingSerial, nm_setting_serial, NM_TYPE_SETTING,
_nm_register_setting (SERIAL, NM_SETTING_PRIORITY_HW_AUX))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_SERIAL)
#define NM_SETTING_SERIAL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_SERIAL, NMSettingSerialPrivate))
diff --git a/libnm-core/nm-setting-tc-config.c b/libnm-core/nm-setting-tc-config.c
index f50969fb7c..04e2f2d510 100644
--- a/libnm-core/nm-setting-tc-config.c
+++ b/libnm-core/nm-setting-tc-config.c
@@ -836,7 +836,6 @@ struct _NMSettingTCConfigClass {
G_DEFINE_TYPE_WITH_CODE (NMSettingTCConfig, nm_setting_tc_config, NM_TYPE_SETTING,
_nm_register_setting (TC_CONFIG, NM_SETTING_PRIORITY_IP))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_TC_CONFIG)
/**
* nm_setting_tc_config_new:
diff --git a/libnm-core/nm-setting-team-port.c b/libnm-core/nm-setting-team-port.c
index b902b822d8..76f0eec1a7 100644
--- a/libnm-core/nm-setting-team-port.c
+++ b/libnm-core/nm-setting-team-port.c
@@ -41,7 +41,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingTeamPort, nm_setting_team_port, NM_TYPE_SETTING,
_nm_register_setting (TEAM_PORT, NM_SETTING_PRIORITY_AUX))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_TEAM_PORT)
#define NM_SETTING_TEAM_PORT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_TEAM_PORT, NMSettingTeamPortPrivate))
diff --git a/libnm-core/nm-setting-team.c b/libnm-core/nm-setting-team.c
index 195e509c1e..138ad85a6d 100644
--- a/libnm-core/nm-setting-team.c
+++ b/libnm-core/nm-setting-team.c
@@ -559,7 +559,6 @@ nm_team_link_watcher_get_flags (NMTeamLinkWatcher *watcher)
G_DEFINE_TYPE_WITH_CODE (NMSettingTeam, nm_setting_team, NM_TYPE_SETTING,
_nm_register_setting (TEAM, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_TEAM)
#define NM_SETTING_TEAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_TEAM, NMSettingTeamPrivate))
diff --git a/libnm-core/nm-setting-tun.c b/libnm-core/nm-setting-tun.c
index edcb3ffdc9..de39439557 100644
--- a/libnm-core/nm-setting-tun.c
+++ b/libnm-core/nm-setting-tun.c
@@ -40,7 +40,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingTun, nm_setting_tun, NM_TYPE_SETTING,
_nm_register_setting (TUN, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_TUN)
#define NM_SETTING_TUN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_TUN, NMSettingTunPrivate))
diff --git a/libnm-core/nm-setting-user.c b/libnm-core/nm-setting-user.c
index ccc030aacd..56dd71e93f 100644
--- a/libnm-core/nm-setting-user.c
+++ b/libnm-core/nm-setting-user.c
@@ -65,7 +65,6 @@ struct _NMSettingUserClass {
G_DEFINE_TYPE_WITH_CODE (NMSettingUser, nm_setting_user, NM_TYPE_SETTING,
_nm_register_setting (USER, NM_SETTING_PRIORITY_USER))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_USER)
#define NM_SETTING_USER_GET_PRIVATE(self) _NM_GET_PRIVATE(self, NMSettingUser, NM_IS_SETTING_USER)
diff --git a/libnm-core/nm-setting-vlan.c b/libnm-core/nm-setting-vlan.c
index f9c6e02d66..56e44b76cf 100644
--- a/libnm-core/nm-setting-vlan.c
+++ b/libnm-core/nm-setting-vlan.c
@@ -43,7 +43,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingVlan, nm_setting_vlan, NM_TYPE_SETTING,
_nm_register_setting (VLAN, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_VLAN)
#define NM_SETTING_VLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_VLAN, NMSettingVlanPrivate))
diff --git a/libnm-core/nm-setting-vpn.c b/libnm-core/nm-setting-vpn.c
index a921f51fed..66c902045d 100644
--- a/libnm-core/nm-setting-vpn.c
+++ b/libnm-core/nm-setting-vpn.c
@@ -45,7 +45,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingVpn, nm_setting_vpn, NM_TYPE_SETTING,
_nm_register_setting (VPN, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_VPN)
#define NM_SETTING_VPN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_VPN, NMSettingVpnPrivate))
diff --git a/libnm-core/nm-setting-vxlan.c b/libnm-core/nm-setting-vxlan.c
index 4be6a236f9..c76ac6229b 100644
--- a/libnm-core/nm-setting-vxlan.c
+++ b/libnm-core/nm-setting-vxlan.c
@@ -38,7 +38,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingVxlan, nm_setting_vxlan, NM_TYPE_SETTING,
_nm_register_setting (VXLAN, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_VXLAN)
#define NM_SETTING_VXLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_VXLAN, NMSettingVxlanPrivate))
diff --git a/libnm-core/nm-setting-wimax.c b/libnm-core/nm-setting-wimax.c
index dbfb46e4c8..0669b09e4f 100644
--- a/libnm-core/nm-setting-wimax.c
+++ b/libnm-core/nm-setting-wimax.c
@@ -44,7 +44,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingWimax, nm_setting_wimax, NM_TYPE_SETTING,
_nm_register_setting (WIMAX, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_WIMAX)
#define NM_SETTING_WIMAX_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_WIMAX, NMSettingWimaxPrivate))
diff --git a/libnm-core/nm-setting-wired.c b/libnm-core/nm-setting-wired.c
index 5da9ce7d7f..1ff0f95672 100644
--- a/libnm-core/nm-setting-wired.c
+++ b/libnm-core/nm-setting-wired.c
@@ -42,7 +42,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingWired, nm_setting_wired, NM_TYPE_SETTING,
_nm_register_setting (WIRED, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_WIRED)
#define NM_SETTING_WIRED_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_WIRED, NMSettingWiredPrivate))
diff --git a/libnm-core/nm-setting-wireless-security.c b/libnm-core/nm-setting-wireless-security.c
index 31e386f35b..7ba038e490 100644
--- a/libnm-core/nm-setting-wireless-security.c
+++ b/libnm-core/nm-setting-wireless-security.c
@@ -55,7 +55,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingWirelessSecurity, nm_setting_wireless_security, NM_TYPE_SETTING,
_nm_register_setting (WIRELESS_SECURITY, NM_SETTING_PRIORITY_HW_AUX))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_WIRELESS_SECURITY)
#define NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_WIRELESS_SECURITY, NMSettingWirelessSecurityPrivate))
diff --git a/libnm-core/nm-setting-wireless.c b/libnm-core/nm-setting-wireless.c
index 89a2df8ebe..40708e1729 100644
--- a/libnm-core/nm-setting-wireless.c
+++ b/libnm-core/nm-setting-wireless.c
@@ -42,7 +42,6 @@
G_DEFINE_TYPE_WITH_CODE (NMSettingWireless, nm_setting_wireless, NM_TYPE_SETTING,
_nm_register_setting (WIRELESS, NM_SETTING_PRIORITY_HW_BASE))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_WIRELESS)
#define NM_SETTING_WIRELESS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_WIRELESS, NMSettingWirelessPrivate))
diff --git a/libnm-core/nm-setting.c b/libnm-core/nm-setting.c
index 7fdbc34c07..0274c4e3d2 100644
--- a/libnm-core/nm-setting.c
+++ b/libnm-core/nm-setting.c
@@ -72,9 +72,7 @@ typedef struct {
const SettingInfo *info;
} NMSettingPrivate;
-static void _register_settings_init (void);
-
-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (NMSetting, nm_setting, G_TYPE_OBJECT, _register_settings_init () )
+G_DEFINE_ABSTRACT_TYPE (NMSetting, nm_setting, G_TYPE_OBJECT)
#define NM_SETTING_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING, NMSettingPrivate))
@@ -94,14 +92,75 @@ _nm_gtype_hash (gconstpointer v)
return *((const GType *) v);
}
+/*****************************************************************************/
+
static void
-_register_settings_init (void)
+_register_settings_ensure_types (void)
{
- registered_settings = g_hash_table_new (nm_str_hash, g_str_equal);
- registered_settings_by_type = g_hash_table_new (_nm_gtype_hash, _nm_gtype_equal);
+#define ENSURE_TYPE(get_type) \
+ G_STMT_START { \
+ GType get_type (void); \
+ \
+ get_type (); \
+ } G_STMT_END
+
+ ENSURE_TYPE (nm_setting_802_1x_get_type);
+ ENSURE_TYPE (nm_setting_adsl_get_type);
+ ENSURE_TYPE (nm_setting_bluetooth_get_type);
+ ENSURE_TYPE (nm_setting_bond_get_type);
+ ENSURE_TYPE (nm_setting_bridge_get_type);
+ ENSURE_TYPE (nm_setting_bridge_port_get_type);
+ ENSURE_TYPE (nm_setting_cdma_get_type);
+ ENSURE_TYPE (nm_setting_connection_get_type);
+ ENSURE_TYPE (nm_setting_dcb_get_type);
+ ENSURE_TYPE (nm_setting_dummy_get_type);
+ ENSURE_TYPE (nm_setting_generic_get_type);
+ ENSURE_TYPE (nm_setting_gsm_get_type);
+ ENSURE_TYPE (nm_setting_infiniband_get_type);
+ ENSURE_TYPE (nm_setting_ip4_config_get_type);
+ ENSURE_TYPE (nm_setting_ip6_config_get_type);
+ ENSURE_TYPE (nm_setting_ip_tunnel_get_type);
+ ENSURE_TYPE (nm_setting_macsec_get_type);
+ ENSURE_TYPE (nm_setting_macvlan_get_type);
+ ENSURE_TYPE (nm_setting_olpc_mesh_get_type);
+ ENSURE_TYPE (nm_setting_ovs_bridge_get_type);
+ ENSURE_TYPE (nm_setting_ovs_interface_get_type);
+ ENSURE_TYPE (nm_setting_ovs_patch_get_type);
+ ENSURE_TYPE (nm_setting_ovs_port_get_type);
+ ENSURE_TYPE (nm_setting_ppp_get_type);
+ ENSURE_TYPE (nm_setting_pppoe_get_type);
+ ENSURE_TYPE (nm_setting_proxy_get_type);
+ ENSURE_TYPE (nm_setting_serial_get_type);
+ ENSURE_TYPE (nm_setting_tc_config_get_type);
+ ENSURE_TYPE (nm_setting_team_get_type);
+ ENSURE_TYPE (nm_setting_team_port_get_type);
+ ENSURE_TYPE (nm_setting_tun_get_type);
+ ENSURE_TYPE (nm_setting_user_get_type);
+ ENSURE_TYPE (nm_setting_vlan_get_type);
+ ENSURE_TYPE (nm_setting_vpn_get_type);
+ ENSURE_TYPE (nm_setting_vxlan_get_type);
+ ENSURE_TYPE (nm_setting_wimax_get_type);
+ ENSURE_TYPE (nm_setting_wired_get_type);
+ ENSURE_TYPE (nm_setting_wireless_get_type);
+ ENSURE_TYPE (nm_setting_wireless_security_get_type);
}
-#define _register_settings_ensure_inited() (nm_setting_get_type ())
+/*****************************************************************************/
+
+static int volatile _register_settings_ensure_inited_val = 0;
+
+#define _register_settings_ensure_inited() \
+ G_STMT_START { \
+ if (G_UNLIKELY (_register_settings_ensure_inited_val == 0)) \
+ _register_settings_ensure_inited_impl (); \
+ } G_STMT_END
+
+static void
+_register_settings_ensure_inited_impl (void)
+{
+ _register_settings_ensure_types ();
+ g_atomic_int_set (&_register_settings_ensure_inited_val, 1);
+}
/*****************************************************************************/
@@ -139,8 +198,6 @@ _nm_register_setting_impl (const char *name,
nm_assert (!NM_IN_SET (type, G_TYPE_INVALID, G_TYPE_NONE));
nm_assert (priority != NM_SETTING_PRIORITY_INVALID);
- _register_settings_ensure_inited ();
-
nm_assert ( priority != NM_SETTING_PRIORITY_CONNECTION
|| nm_streq (name, NM_SETTING_CONNECTION_SETTING_NAME));
@@ -150,14 +207,26 @@ _nm_register_setting_impl (const char *name,
info->name = name;
g_mutex_lock (&mutex);
- nm_assert (registered_settings);
- nm_assert (registered_settings_by_type);
- nm_assert (!g_hash_table_contains (registered_settings, name));
- nm_assert (!g_hash_table_contains (registered_settings_by_type, &type));
+
+ if (!registered_settings) {
+ nm_assert (!registered_settings_by_type);
+ registered_settings = g_hash_table_new (nm_str_hash, g_str_equal);
+ registered_settings_by_type = g_hash_table_new (_nm_gtype_hash, _nm_gtype_equal);
+ } else {
+ nm_assert (!g_hash_table_contains (registered_settings, name));
+ nm_assert (!g_hash_table_contains (registered_settings_by_type, &type));
+ }
g_hash_table_insert (registered_settings, (void *) info->name, info);
g_hash_table_insert (registered_settings_by_type, &info->type, info);
+
g_mutex_unlock (&mutex);
+
+ /* we cannot register types, after _register_settings_ensure_inited() is done.
+ *
+ * This means, you need to register the type in _register_settings_ensure_types()
+ * above. */
+ nm_assert (g_atomic_int_get (&_register_settings_ensure_inited_val) == 0);
}
static const SettingInfo *