summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libnm-core/nm-core-internal.h2
-rw-r--r--libnm-core/nm-setting-team-port.c6
-rw-r--r--libnm-core/nm-setting-team.c43
-rw-r--r--libnm-core/nm-utils-private.h2
4 files changed, 32 insertions, 21 deletions
diff --git a/libnm-core/nm-core-internal.h b/libnm-core/nm-core-internal.h
index f19bc300ee..95b50d03a0 100644
--- a/libnm-core/nm-core-internal.h
+++ b/libnm-core/nm-core-internal.h
@@ -534,6 +534,8 @@ gboolean _nm_utils_inet6_is_token (const struct in6_addr *in6addr);
/*****************************************************************************/
+NMTeamLinkWatcher *_nm_team_link_watcher_ref (NMTeamLinkWatcher *watcher);
+
int nm_team_link_watcher_cmp (const NMTeamLinkWatcher *watcher, const NMTeamLinkWatcher *other);
int nm_team_link_watchers_cmp (const NMTeamLinkWatcher *const*a,
diff --git a/libnm-core/nm-setting-team-port.c b/libnm-core/nm-setting-team-port.c
index 411a48c4a9..d083943ed6 100644
--- a/libnm-core/nm-setting-team-port.c
+++ b/libnm-core/nm-setting-team-port.c
@@ -236,7 +236,7 @@ nm_setting_team_port_add_link_watcher (NMSettingTeamPort *setting,
return FALSE;
}
- g_ptr_array_add (priv->link_watchers, nm_team_link_watcher_dup (link_watcher));
+ g_ptr_array_add (priv->link_watchers, _nm_team_link_watcher_ref (link_watcher));
_notify (setting, PROP_LINK_WATCHERS);
return TRUE;
}
@@ -472,7 +472,7 @@ get_property (GObject *object, guint prop_id,
break;
case PROP_LINK_WATCHERS:
g_value_take_boxed (value, _nm_utils_copy_array (priv->link_watchers,
- (NMUtilsCopyFunc) nm_team_link_watcher_dup,
+ (NMUtilsCopyFunc) _nm_team_link_watcher_ref,
(GDestroyNotify) nm_team_link_watcher_unref));
break;
default:
@@ -548,7 +548,7 @@ set_property (GObject *object, guint prop_id,
case PROP_LINK_WATCHERS:
g_ptr_array_unref (priv->link_watchers);
priv->link_watchers = _nm_utils_copy_array (g_value_get_boxed (value),
- (NMUtilsCopyFunc) nm_team_link_watcher_dup,
+ (NMUtilsCopyFunc) _nm_team_link_watcher_ref,
(GDestroyNotify) nm_team_link_watcher_unref);
if (priv->link_watchers->len)
align_value = value;
diff --git a/libnm-core/nm-setting-team.c b/libnm-core/nm-setting-team.c
index 1e810155ea..663d7d819c 100644
--- a/libnm-core/nm-setting-team.c
+++ b/libnm-core/nm-setting-team.c
@@ -42,7 +42,7 @@
*****************************************************************************/
G_DEFINE_BOXED_TYPE (NMTeamLinkWatcher, nm_team_link_watcher,
- nm_team_link_watcher_dup, nm_team_link_watcher_unref)
+ _nm_team_link_watcher_ref, nm_team_link_watcher_unref)
typedef enum {
LINK_WATCHER_ETHTOOL = 0,
@@ -57,7 +57,8 @@ static const char* _link_watcher_name[] = {
};
struct NMTeamLinkWatcher {
- guint refcount;
+
+ int ref_count;
guint8 type; /* LinkWatcherTypes */
@@ -87,15 +88,15 @@ struct NMTeamLinkWatcher {
#define _CHECK_WATCHER_VOID(watcher) \
G_STMT_START { \
g_return_if_fail (watcher != NULL); \
- g_return_if_fail (watcher->refcount > 0); \
- g_return_if_fail (watcher->type <= LINK_WATCHER_ARP_PING); \
+ g_return_if_fail (watcher->ref_count > 0); \
+ nm_assert (watcher->type <= LINK_WATCHER_ARP_PING); \
} G_STMT_END
#define _CHECK_WATCHER(watcher, err_val) \
G_STMT_START { \
g_return_val_if_fail (watcher != NULL, err_val); \
- g_return_val_if_fail (watcher->refcount > 0, err_val); \
- g_return_val_if_fail (watcher->type <= LINK_WATCHER_ARP_PING, err_val); \
+ g_return_val_if_fail (watcher->ref_count > 0, err_val); \
+ nm_assert (watcher->type <= LINK_WATCHER_ARP_PING); \
} G_STMT_END
/**
@@ -131,7 +132,7 @@ nm_team_link_watcher_new_ethtool (int delay_up,
watcher = g_malloc (nm_offsetofend (NMTeamLinkWatcher, ethtool));
- watcher->refcount = 1;
+ watcher->ref_count = 1;
watcher->type = LINK_WATCHER_ETHTOOL;
watcher->ethtool.delay_up = delay_up;
watcher->ethtool.delay_down = delay_down;
@@ -195,7 +196,7 @@ nm_team_link_watcher_new_nsna_ping (int init_wait,
watcher = g_malloc ( nm_offsetofend (NMTeamLinkWatcher, nsna_ping)
+ l_target_host);
- watcher->refcount = 1;
+ watcher->ref_count = 1;
watcher->type = LINK_WATCHER_NSNA_PING;
watcher->nsna_ping.init_wait = init_wait;
watcher->nsna_ping.interval = interval;
@@ -325,7 +326,7 @@ nm_team_link_watcher_new_arp_ping2 (int init_wait,
+ l_target_host
+ l_source_host);
- watcher->refcount = 1;
+ watcher->ref_count = 1;
watcher->type = LINK_WATCHER_ARP_PING;
watcher->arp_ping.init_wait = init_wait;
watcher->arp_ping.interval = interval;
@@ -344,6 +345,15 @@ nm_team_link_watcher_new_arp_ping2 (int init_wait,
return watcher;
}
+NMTeamLinkWatcher *
+_nm_team_link_watcher_ref (NMTeamLinkWatcher *watcher)
+{
+ _CHECK_WATCHER (watcher, NULL);
+
+ g_atomic_int_inc (&watcher->ref_count);
+ return watcher;
+}
+
/**
* nm_team_link_watcher_ref:
* @watcher: the #NMTeamLinkWatcher
@@ -353,10 +363,9 @@ nm_team_link_watcher_new_arp_ping2 (int init_wait,
* Since: 1.12
**/
void
-nm_team_link_watcher_ref (NMTeamLinkWatcher *watcher){
- _CHECK_WATCHER_VOID (watcher);
-
- watcher->refcount++;
+nm_team_link_watcher_ref (NMTeamLinkWatcher *watcher)
+{
+ _nm_team_link_watcher_ref (watcher);
}
/**
@@ -373,7 +382,7 @@ nm_team_link_watcher_unref (NMTeamLinkWatcher *watcher)
{
_CHECK_WATCHER_VOID (watcher);
- if (--watcher->refcount == 0)
+ if (g_atomic_int_dec_and_test (&watcher->ref_count))
g_free (watcher);
}
@@ -1190,7 +1199,7 @@ nm_setting_team_add_link_watcher (NMSettingTeam *setting,
return FALSE;
}
- g_ptr_array_add (priv->link_watchers, nm_team_link_watcher_dup (link_watcher));
+ g_ptr_array_add (priv->link_watchers, _nm_team_link_watcher_ref (link_watcher));
_notify (setting, PROP_LINK_WATCHERS);
return TRUE;
}
@@ -1536,7 +1545,7 @@ get_property (GObject *object, guint prop_id,
break;
case PROP_LINK_WATCHERS:
g_value_take_boxed (value, _nm_utils_copy_array (priv->link_watchers,
- (NMUtilsCopyFunc) nm_team_link_watcher_dup,
+ (NMUtilsCopyFunc) _nm_team_link_watcher_ref,
(GDestroyNotify) nm_team_link_watcher_unref));
break;
default:
@@ -1671,7 +1680,7 @@ set_property (GObject *object, guint prop_id,
case PROP_LINK_WATCHERS:
g_ptr_array_unref (priv->link_watchers);
priv->link_watchers = _nm_utils_copy_array (g_value_get_boxed (value),
- (NMUtilsCopyFunc) nm_team_link_watcher_dup,
+ (NMUtilsCopyFunc) _nm_team_link_watcher_ref,
(GDestroyNotify) nm_team_link_watcher_unref);
if (priv->link_watchers->len)
align_value = value;
diff --git a/libnm-core/nm-utils-private.h b/libnm-core/nm-utils-private.h
index df68054379..8d953191d3 100644
--- a/libnm-core/nm-utils-private.h
+++ b/libnm-core/nm-utils-private.h
@@ -231,7 +231,7 @@ _nm_utils_json_extract_ptr_array (char *conf,
if (!data)
return ret;
for (i = 0; i < data->len; i++)
- g_ptr_array_add (ret, nm_team_link_watcher_dup (data->pdata[i]));
+ g_ptr_array_add (ret, _nm_team_link_watcher_ref (data->pdata[i]));
return ret;
}