Imported Upstream connman version 1.38
[platform/upstream/connman.git] / src / agent.c
old mode 100644 (file)
new mode 100755 (executable)
index a340026..d6113af
@@ -165,12 +165,17 @@ static int send_cancel_request(struct connman_agent *agent,
                        struct connman_agent_request *request)
 {
        DBusMessage *message;
+       const char *interface = NULL;
 
-       DBG("send cancel req to %s %s", agent->owner, agent->path);
+       if (request && request->driver)
+               interface = request->driver->interface;
+
+       DBG("send cancel req to %s %s iface %s", agent->owner, agent->path,
+                                                               interface);
 
        message = dbus_message_new_method_call(agent->owner,
                                        agent->path,
-                                       request->driver->interface,
+                                       interface,
                                        "Cancel");
        if (!message) {
                connman_error("Couldn't allocate D-Bus message");
@@ -233,12 +238,12 @@ int connman_agent_queue_message(void *user_context,
        driver = get_driver();
        DBG("driver %p", driver);
 
-       if (driver && driver->context_ref) {
+       if (driver && driver->context_ref)
                queue_data->user_context = driver->context_ref(user_context);
-               queue_data->driver = driver;
-       } else
+       else
                queue_data->user_context = user_context;
 
+       queue_data->driver = driver;
        queue_data->msg = dbus_message_ref(msg);
        queue_data->timeout = timeout;
        queue_data->callback = callback;
@@ -502,7 +507,7 @@ void connman_agent_cancel(void *user_context)
 
        g_hash_table_iter_init(&iter, agent_hash);
        while (g_hash_table_iter_next(&iter, &key, &value)) {
-               GList *list;
+               GList *list, *next;
                struct connman_agent *agent = value;
 
                /*
@@ -512,19 +517,22 @@ void connman_agent_cancel(void *user_context)
                while (list) {
                        struct connman_agent_request *request = list->data;
 
+                       next = list->next;
+
                        if (request && request->user_context &&
                                                request->user_context ==
                                                                user_context) {
                                DBG("cancel pending %p", request);
 
+                               agent->queue = g_list_delete_link(agent->queue,
+                                                                       list);
+
                                request->callback(NULL, request->user_data);
 
                                agent_request_free(request);
+                       }
 
-                               agent->queue = list->next;
-                               list = g_list_delete_link(list, list);
-                       } else
-                               list = list->next;
+                       list = next;
                }
 
                /*
@@ -578,7 +586,7 @@ static void agent_release(struct connman_agent *agent, const char *interface)
 
        message = dbus_message_new_method_call(agent->owner, agent->path,
                                                interface, "Release");
-       if (message == NULL) {
+       if (!message) {
                connman_error("Couldn't allocate D-Bus message");
                return;
        }