summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-07-17 18:37:28 +0200
committerMarcel Holtmann <marcel@holtmann.org>2009-07-17 18:37:28 +0200
commitff88e68262afa40796e6efe71d3793ba1a1c4f5e (patch)
tree6f2e6026107ebad5909211e9b254a6d7ca930248
parent34e6a5e79321d56421739631a43034b822838985 (diff)
downloadconnman-ff88e68262afa40796e6efe71d3793ba1a1c4f5e.tar.gz
connman-ff88e68262afa40796e6efe71d3793ba1a1c4f5e.tar.bz2
connman-ff88e68262afa40796e6efe71d3793ba1a1c4f5e.zip
Ensure only one service connection attempt at a time
-rw-r--r--src/service.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/service.c b/src/service.c
index 09963d2e..fc2ff87b 100644
--- a/src/service.c
+++ b/src/service.c
@@ -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);