summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2022-09-27 12:45:18 +0200
committerThomas Haller <thaller@redhat.com>2022-10-03 17:54:56 +0200
commit28cb40705638435df62e07d8e7c210f47c21efb3 (patch)
treee26880d40fb426684512e6976d767a2b6a78467b
parent5713a533f52f597226f81117f8ebfe3121f8f952 (diff)
downloadNetworkManager-28cb40705638435df62e07d8e7c210f47c21efb3.tar.gz
libnm: rework lookup of private data for NMConnection of NMSimpleConnection
NMConnection is an interface, and as such has no data itself. In practice, there are only two implementations of this interface, NMSimpleConnection and NMRemoteConnection. The latter only exists in libnm, not the daemon. Thus, lookup of the private data is already optimized for NMSimpleConnection instances via _nm_simple_connection_private_offset. Use the same mechanism also for NMSimpleConnection itself.
-rw-r--r--src/libnm-core-impl/nm-connection.c26
-rw-r--r--src/libnm-core-impl/nm-setting-private.h17
-rw-r--r--src/libnm-core-impl/nm-simple-connection.c9
3 files changed, 32 insertions, 20 deletions
diff --git a/src/libnm-core-impl/nm-connection.c b/src/libnm-core-impl/nm-connection.c
index 5a46226559..eabb3a6996 100644
--- a/src/libnm-core-impl/nm-connection.c
+++ b/src/libnm-core-impl/nm-connection.c
@@ -124,19 +124,19 @@ _nm_connection_get_private_from_qdata(NMConnection *connection)
return priv;
}
-#define NM_CONNECTION_GET_PRIVATE(connection) \
- ({ \
- NMConnection *_connection = (connection); \
- NMConnectionPrivate *_priv; \
- \
- if (G_LIKELY(NM_IS_SIMPLE_CONNECTION(_connection))) \
- _priv = (gpointer) (&(((char *) _connection)[_nm_simple_connection_private_offset])); \
- else \
- _priv = _nm_connection_get_private_from_qdata(_connection); \
- \
- nm_assert(_priv && _priv->self == _connection); \
- \
- _priv; \
+#define NM_CONNECTION_GET_PRIVATE(connection) \
+ ({ \
+ NMConnection *_connection = (connection); \
+ NMConnectionPrivate *_priv; \
+ \
+ if (G_LIKELY(NM_IS_SIMPLE_CONNECTION(_connection))) \
+ _priv = _NM_SIMPLE_CONNECTION_GET_CONNECTION_PRIVATE(_connection); \
+ else \
+ _priv = _nm_connection_get_private_from_qdata(_connection); \
+ \
+ nm_assert(_priv && _priv->self == _connection); \
+ \
+ _priv; \
})
/*****************************************************************************/
diff --git a/src/libnm-core-impl/nm-setting-private.h b/src/libnm-core-impl/nm-setting-private.h
index 38b233e92a..01d3113cde 100644
--- a/src/libnm-core-impl/nm-setting-private.h
+++ b/src/libnm-core-impl/nm-setting-private.h
@@ -31,6 +31,23 @@ typedef struct {
extern GTypeClass *_nm_simple_connection_class_instance;
extern int _nm_simple_connection_private_offset;
+#define _NM_SIMPLE_CONNECTION_GET_CONNECTION_PRIVATE(connection) \
+ ({ \
+ gpointer _connection_1 = (connection); \
+ NMConnectionPrivate *_priv_1; \
+ \
+ nm_assert(NM_IS_SIMPLE_CONNECTION(_connection_1)); \
+ \
+ _priv_1 = (void *) (&(((char *) _connection_1)[_nm_simple_connection_private_offset])); \
+ \
+ nm_assert(_priv_1 \
+ == G_TYPE_INSTANCE_GET_PRIVATE(_connection_1, \
+ NM_TYPE_SIMPLE_CONNECTION, \
+ NMConnectionPrivate)); \
+ \
+ _priv_1; \
+ })
+
void _nm_connection_private_clear(NMConnectionPrivate *priv);
/*****************************************************************************/
diff --git a/src/libnm-core-impl/nm-simple-connection.c b/src/libnm-core-impl/nm-simple-connection.c
index 6252dc2ce3..802be3caa4 100644
--- a/src/libnm-core-impl/nm-simple-connection.c
+++ b/src/libnm-core-impl/nm-simple-connection.c
@@ -47,9 +47,6 @@ G_DEFINE_TYPE_WITH_CODE(NMSimpleConnection,
G_IMPLEMENT_INTERFACE(NM_TYPE_CONNECTION,
nm_simple_connection_interface_init);)
-#define _GET_PRIVATE(self) \
- G_TYPE_INSTANCE_GET_PRIVATE(self, NM_TYPE_SIMPLE_CONNECTION, NMConnectionPrivate)
-
/*****************************************************************************/
static void
@@ -57,7 +54,7 @@ nm_simple_connection_init(NMSimpleConnection *self)
{
NMConnectionPrivate *priv;
- priv = _GET_PRIVATE(self);
+ priv = _NM_SIMPLE_CONNECTION_GET_CONNECTION_PRIVATE(self);
priv->self = (NMConnection *) self;
}
@@ -157,14 +154,12 @@ nm_simple_connection_new_clone(NMConnection *connection)
static void
dispose(GObject *object)
{
- NMConnection *connection = NM_CONNECTION(object);
-
#if NM_MORE_ASSERTS
g_signal_handlers_disconnect_by_data(object,
(gpointer) &_nm_assert_connection_unchanging_user_data);
#endif
- _nm_connection_private_clear(_GET_PRIVATE(connection));
+ _nm_connection_private_clear(_NM_SIMPLE_CONNECTION_GET_CONNECTION_PRIVATE(object));
G_OBJECT_CLASS(nm_simple_connection_parent_class)->dispose(object);
}