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

Reply via email to