cli: cleanup connecting state change signal

It seems really ugly, to pass a callback function of wrong
signature. Granted, it probably works due to the C calling
convention, but it seems odd.

Use callbacks of the proper type instead. Then we also don'
need g_signal_connect_swapped().

While at it, rename. "connected_state_cb()" seems a bad name.
This commit is contained in:
Thomas Haller 2022-10-28 08:50:07 +02:00
parent 4fa20ce710
commit 0622ed7051
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728

View file

@ -2108,8 +2108,10 @@ NM_AUTO_DEFINE_FCN0(AddAndActivateInfo *,
add_and_activate_info_free); add_and_activate_info_free);
#define nm_auto_free_add_and_activate_info nm_auto(_nm_auto_free_add_and_activate_info) #define nm_auto_free_add_and_activate_info nm_auto(_nm_auto_free_add_and_activate_info)
static void add_and_activate_notify_state_cb(GObject *src, GParamSpec *pspec, gpointer user_data);
static void static void
connected_state_cb(AddAndActivateInfo *info) add_and_activate_check_state(AddAndActivateInfo *info)
{ {
NMDeviceState state; NMDeviceState state;
NMDeviceStateReason reason; NMDeviceStateReason reason;
@ -2140,13 +2142,24 @@ connected_state_cb(AddAndActivateInfo *info)
return; return;
} }
g_signal_handlers_disconnect_by_func(info->active, G_CALLBACK(connected_state_cb), info); g_signal_handlers_disconnect_by_func(info->active,
g_signal_handlers_disconnect_by_func(info->device, G_CALLBACK(connected_state_cb), info); G_CALLBACK(add_and_activate_notify_state_cb),
info);
g_signal_handlers_disconnect_by_func(info->device,
G_CALLBACK(add_and_activate_notify_state_cb),
info);
add_and_activate_info_free(info); add_and_activate_info_free(info);
quit(); quit();
} }
static void
add_and_activate_notify_state_cb(GObject *src, GParamSpec *pspec, gpointer user_data)
{
add_and_activate_check_state(user_data);
}
static void static void
add_and_activate_cb(GObject *client, GAsyncResult *result, gpointer user_data) add_and_activate_cb(GObject *client, GAsyncResult *result, gpointer user_data)
{ {
@ -2194,9 +2207,15 @@ add_and_activate_cb(GObject *client, GAsyncResult *result, gpointer user_data)
progress_id = g_timeout_add(120, progress_cb, info->device); progress_id = g_timeout_add(120, progress_cb, info->device);
info->active = g_steal_pointer(&active); info->active = g_steal_pointer(&active);
g_signal_connect_swapped(info->device, "notify::state", G_CALLBACK(connected_state_cb), info); g_signal_connect(info->device,
g_signal_connect_swapped(info->active, "notify::state", G_CALLBACK(connected_state_cb), info); "notify::" NM_DEVICE_STATE,
connected_state_cb(g_steal_pointer(&info)); G_CALLBACK(add_and_activate_notify_state_cb),
info);
g_signal_connect(info->active,
"notify::" NM_ACTIVE_CONNECTION_STATE,
G_CALLBACK(add_and_activate_notify_state_cb),
info);
add_and_activate_check_state(g_steal_pointer(&info));
g_timeout_add_seconds(nmc->timeout, timeout_cb, nmc); /* Exit if timeout expires */ g_timeout_add_seconds(nmc->timeout, timeout_cb, nmc); /* Exit if timeout expires */
} }
@ -2262,9 +2281,15 @@ connect_device_cb(GObject *client, GAsyncResult *result, gpointer user_data)
} }
info->active = g_steal_pointer(&active); info->active = g_steal_pointer(&active);
g_signal_connect_swapped(info->device, "notify::state", G_CALLBACK(connected_state_cb), info); g_signal_connect(info->device,
g_signal_connect_swapped(info->active, "notify::state", G_CALLBACK(connected_state_cb), info); "notify::" NM_DEVICE_STATE,
connected_state_cb(g_steal_pointer(&info)); G_CALLBACK(add_and_activate_notify_state_cb),
info);
g_signal_connect(info->active,
"notify::" NM_ACTIVE_CONNECTION_STATE,
G_CALLBACK(add_and_activate_notify_state_cb),
info);
add_and_activate_check_state(g_steal_pointer(&info));
/* Start timer not to loop forever if "notify::state" signal is not issued */ /* Start timer not to loop forever if "notify::state" signal is not issued */
g_timeout_add_seconds(nmc->timeout, timeout_cb, nmc); g_timeout_add_seconds(nmc->timeout, timeout_cb, nmc);