Ensure only one service connection attempt at a time
authorMarcel Holtmann <marcel@holtmann.org>
Fri, 17 Jul 2009 16:37:28 +0000 (18:37 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Fri, 17 Jul 2009 16:37:28 +0000 (18:37 +0200)
src/service.c

index 09963d2..fc2ff87 100644 (file)
@@ -577,6 +577,7 @@ static DBusMessage *connect_service(DBusConnection *conn,
                                        DBusMessage *msg, void *user_data)
 {
        struct connman_service *service = user_data;
+       GSequenceIter *iter;
        int err;
 
        DBG("service %p", service);
@@ -584,6 +585,17 @@ static DBusMessage *connect_service(DBusConnection *conn,
        if (service->pending != NULL)
                return __connman_error_in_progress(msg);
 
+       iter = g_sequence_get_begin_iter(service_list);
+
+       while (g_sequence_iter_is_end(iter) == FALSE) {
+               struct connman_service *service = g_sequence_get(iter);
+
+               if (is_connecting(service) == TRUE)
+                       return __connman_error_in_progress(msg);
+
+               iter = g_sequence_iter_next(iter);
+       }
+
        service->ignore = FALSE;
 
        service->pending = dbus_message_ref(msg);