summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2020-11-02 10:35:25 +0100
committerThomas Haller <thaller@redhat.com>2021-06-10 15:46:01 +0200
commit296a770a8588b2437872fcc23e878a50a3f6e8d1 (patch)
treec2409524861805edb4b48b22ffb80150cc8881c0
parentaf4d01b51b282af95e7841d7c02f73ece8cef541 (diff)
downloadNetworkManager-296a770a8588b2437872fcc23e878a50a3f6e8d1.tar.gz
shared: also reimplement g_atomic_pointer_set() macro
It's not strictly necessary, because contrary to g_atomic_pointer_get() and g_atomic_pointer_compare_and_exchange(), glib's variant for the setter is mostly fine. Still, reimplement it, because we use typeof() eagerly and can thus add more static checks than glib. (cherry picked from commit 7c60e984b6fe742f5719550bd7ccad64608ecb6e) (cherry picked from commit 6ded463f36d945658d601970b5089f2f887f4c5b) (cherry picked from commit 976b358be688864716ade41b94b5872ad95ff4f7)
-rw-r--r--shared/nm-glib-aux/nm-glib.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/shared/nm-glib-aux/nm-glib.h b/shared/nm-glib-aux/nm-glib.h
index 5cac30e12a..bc0f596061 100644
--- a/shared/nm-glib-aux/nm-glib.h
+++ b/shared/nm-glib-aux/nm-glib.h
@@ -589,6 +589,25 @@ _g_atomic_pointer_get (void **atomic)
(typeof (*_atomic)) _g_atomic_pointer_get ((void **) _atomic); \
})
+/* Reimplement g_atomic_pointer_set() macro too. Our variant does more type
+ * checks. */
+static inline void
+_g_atomic_pointer_set (void **atomic, void *newval)
+{
+ return g_atomic_pointer_set (atomic, newval);
+}
+#undef g_atomic_pointer_set
+#define g_atomic_pointer_set(atomic, newval) \
+ ({ \
+ typeof (*atomic) *const _atomic = (atomic); \
+ typeof (*_atomic) const _newval = (newval); \
+ _nm_unused gconstpointer const _val_type_check = _newval; \
+ \
+ (void) (0 ? (gpointer) * (_atomic) : NULL); \
+ \
+ _g_atomic_pointer_set ((void **) _atomic, (void *) _newval); \
+ })
+
/* Glib implements g_atomic_pointer_compare_and_exchange() as a macro.
* For one, to inline the atomic operation and also to perform some type checks
* on the arguments.