summary refs log tree commit diff
path: root/src/platform
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2020-05-08 21:40:53 +0200
committerMichael Biebl <biebl@debian.org>2020-05-08 21:40:53 +0200
commitd460892bbfece74fb6d3cd846bf6ef548290be41 (patch)
tree0474e5be0b5e5fac0d2f3a1e554382e8d1aa6397 /src/platform
parent1e5977b62f896e844b548c3007ace9e1dfa7f9ed (diff)
New upstream version 1.24.0 upstream/1.24.0
Diffstat (limited to 'src/platform')
-rw-r--r--src/platform/nm-linux-platform.c8
-rw-r--r--src/platform/nmp-object.c8
-rw-r--r--src/platform/tests/test-link.c77
3 files changed, 61 insertions, 32 deletions
diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c
index f7249bb7..014cca71 100644
--- a/src/platform/nm-linux-platform.c
+++ b/src/platform/nm-linux-platform.c
@@ -5131,9 +5131,9 @@ sysctl_set_async (NMPlatform *platform,
 			                                  callback,
 			                                  data,
 			                                  error);
-			nm_utils_invoke_on_idle (sysctl_set_async_return_idle,
-			                         packed,
-			                         cancellable);
+			nm_utils_invoke_on_idle (cancellable,
+			                         sysctl_set_async_return_idle,
+			                         packed);
 			return;
 		}
 	} else
@@ -7390,7 +7390,7 @@ out_idle:
 		                                  g_steal_pointer (&error),
 		                                  callback,
 		                                  data);
-		nm_utils_invoke_on_idle (sriov_idle_cb, packed, cancellable);
+		nm_utils_invoke_on_idle (cancellable, sriov_idle_cb, packed);
 	}
 }
 
diff --git a/src/platform/nmp-object.c b/src/platform/nmp-object.c
index 541211cd..a6aa5e22 100644
--- a/src/platform/nmp-object.c
+++ b/src/platform/nmp-object.c
@@ -1405,15 +1405,15 @@ nmp_object_id_cmp (const NMPObject *obj1, const NMPObject *obj2)
 		nm_assert (klass2);
 		NM_CMP_DIRECT (klass->obj_type, klass2->obj_type);
 		/* resort to pointer comparison */
-		if (klass < klass2)
-			return -1;
-		return 1;
+		NM_CMP_DIRECT_PTR (klass, klass2);
+		return 0;
 	}
 
 	if (!klass->cmd_plobj_id_cmp) {
 		/* the klass doesn't implement ID cmp(). That means, different objects
 		 * never compare equal, but the cmp() according to their pointer value. */
-		return (obj1 < obj2) ? -1 : 1;
+		NM_CMP_DIRECT_PTR (obj1, obj2);
+		return 0;
 	}
 
 	return klass->cmd_plobj_id_cmp (&obj1->object, &obj2->object);
diff --git a/src/platform/tests/test-link.c b/src/platform/tests/test-link.c
index 2661914b..ea4a2c5a 100644
--- a/src/platform/tests/test-link.c
+++ b/src/platform/tests/test-link.c
@@ -3050,18 +3050,29 @@ test_sysctl_netns_switch (void)
 	nmtstp_link_delete (PL, FALSE, ifindex, NULL, TRUE);
 }
 
-static void
-sysctl_set_async_cb_assert_success (GError *error, gpointer data)
-{
-	g_assert_no_error (error);
-	g_main_loop_quit (data);
-}
+typedef struct {
+	GMainLoop *loop;
+	const char *path;
+	gboolean expected_success;
+	gint32 expected_value;
+} SetAsyncData;
 
 static void
-sysctl_set_async_cb_assert_failure (GError *error, gpointer data)
+sysctl_set_async_cb (GError *error, gpointer user_data)
 {
-	g_assert (error);
-	g_main_loop_quit (data);
+	SetAsyncData *data = user_data;
+
+	if (data->expected_success) {
+		g_assert_no_error (error);
+		g_assert_cmpint (nm_platform_sysctl_get_int32 (NM_PLATFORM_GET,
+		                                               NMP_SYSCTL_PATHID_ABSOLUTE (data->path),
+		                                               -1),
+		                 ==,
+		                 data->expected_value);
+	} else
+		g_assert (error);
+
+	g_main_loop_quit (data->loop);
 }
 
 static void
@@ -3070,43 +3081,53 @@ test_sysctl_set_async (void)
 	NMPlatform *const PL = NM_PLATFORM_GET;
 	const char *const IFNAME = "nm-dummy-0";
 	const char *const PATH = "/proc/sys/net/ipv4/conf/nm-dummy-0/rp_filter";
-	gs_free GMainLoop *loop = NULL;
+	GMainLoop *loop;
 	gs_unref_object GCancellable *cancellable = NULL;
+	gboolean proc_writable;
+	SetAsyncData data;
 	int ifindex;
 
 	ifindex = nmtstp_link_dummy_add (PL, -1, IFNAME)->ifindex;
 	loop = g_main_loop_new (NULL, FALSE);
 	cancellable = g_cancellable_new ();
+	proc_writable = access (PATH, W_OK) == 0;
+
+	data = (SetAsyncData) {
+		.loop = loop,
+		.path = PATH,
+		.expected_success = proc_writable,
+		.expected_value = 2,
+	};
 
 	nm_platform_sysctl_set_async (PL,
 	                              NMP_SYSCTL_PATHID_ABSOLUTE (PATH),
 	                              (const char *[]) { "2", NULL},
-	                              sysctl_set_async_cb_assert_success,
-	                              loop,
+	                              sysctl_set_async_cb,
+	                              &data,
 	                              cancellable);
 
 	if (!nmtst_main_loop_run (loop, 1000))
 		g_assert_not_reached ();
 
-	g_assert_cmpint (nm_platform_sysctl_get_int32 (PL, NMP_SYSCTL_PATHID_ABSOLUTE (PATH), -1),
-	                 ==,
-	                 2);
+	data = (SetAsyncData) {
+		.loop = loop,
+		.path = PATH,
+		.expected_success = proc_writable,
+		.expected_value = 1,
+	};
 
 	nm_platform_sysctl_set_async (PL,
 	                              NMP_SYSCTL_PATHID_ABSOLUTE (PATH),
 	                              (const char *[]) { "2", "0", "1", "0", "1", NULL},
-	                              sysctl_set_async_cb_assert_success,
-	                              loop,
+	                              sysctl_set_async_cb,
+	                              &data,
 	                              cancellable);
 
 	if (!nmtst_main_loop_run (loop, 2000))
 		g_assert_not_reached ();
 
-	g_assert_cmpint (nm_platform_sysctl_get_int32 (PL, NMP_SYSCTL_PATHID_ABSOLUTE (PATH), -1),
-	                 ==,
-	                 1);
-
 	nmtstp_link_delete (NULL, -1, ifindex, IFNAME, TRUE);
+	g_main_loop_unref (loop);
 }
 
 static void
@@ -3115,25 +3136,33 @@ test_sysctl_set_async_fail (void)
 	NMPlatform *const PL = NM_PLATFORM_GET;
 	const char *const IFNAME = "nm-dummy-0";
 	const char *const PATH = "/proc/sys/net/ipv4/conf/nm-dummy-0/does-not-exist";
-	gs_free GMainLoop *loop = NULL;
+	GMainLoop *loop;
 	gs_unref_object GCancellable *cancellable = NULL;
+	SetAsyncData data;
 	int ifindex;
 
 	ifindex = nmtstp_link_dummy_add (PL, -1, IFNAME)->ifindex;
 	loop = g_main_loop_new (NULL, FALSE);
 	cancellable = g_cancellable_new ();
 
+	data = (SetAsyncData) {
+		.loop = loop,
+		.path = PATH,
+		.expected_success = FALSE,
+	};
+
 	nm_platform_sysctl_set_async (PL,
 	                              NMP_SYSCTL_PATHID_ABSOLUTE (PATH),
 	                              (const char *[]) { "2", NULL},
-	                              sysctl_set_async_cb_assert_failure,
-	                              loop,
+	                              sysctl_set_async_cb,
+	                              &data,
 	                              cancellable);
 
 	if (!nmtst_main_loop_run (loop, 1000))
 		g_assert_not_reached ();
 
 	nmtstp_link_delete (NULL, -1, ifindex, IFNAME, TRUE);
+	g_main_loop_unref (loop);
 }
 
 /*****************************************************************************/