Don't wait for a reply from supplicant for interface removal if there's not callback function for processing the reply. --- gsupplicant/supplicant.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c index 909a617..d5779e0 100644 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -3693,7 +3693,8 @@ static void interface_remove_params(DBusMessageIter *iter, void *user_data) { struct interface_data *data = user_data; - dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, + if (data) + dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &data->interface->path); } @@ -3702,7 +3703,7 @@ int g_supplicant_interface_remove(GSupplicantInterface *interface, GSupplicantInterfaceCallback callback, void *user_data) { - struct interface_data *data; + struct interface_data *data = NULL; int ret; if (!interface) @@ -3713,22 +3714,27 @@ int g_supplicant_interface_remove(GSupplicantInterface *interface, g_supplicant_interface_cancel(interface); - data = dbus_malloc0(sizeof(*data)); - if (!data) - return -ENOMEM; + if (callback) { + data = dbus_malloc0(sizeof(*data)); + if (!data) + return -ENOMEM; - data->interface = interface; - data->path = g_strdup(interface->path); - data->callback = callback; - data->user_data = user_data; + data->interface = interface; + data->path = g_strdup(interface->path); + data->callback = callback; + data->user_data = user_data; + } ret = supplicant_dbus_method_call(SUPPLICANT_PATH, SUPPLICANT_INTERFACE, "RemoveInterface", interface_remove_params, - interface_remove_result, data, + data + ? interface_remove_result + : NULL, + data, NULL); - if (ret < 0) { + if (ret < 0 && data) { g_free(data->path); dbus_free(data); } -- 1.9.1 _______________________________________________ connman mailing list connman@connman.net https://lists.connman.net/mailman/listinfo/connman