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