diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-07-17 18:37:28 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-07-17 18:37:28 +0200 |
commit | ff88e68262afa40796e6efe71d3793ba1a1c4f5e (patch) | |
tree | 6f2e6026107ebad5909211e9b254a6d7ca930248 | |
parent | 34e6a5e79321d56421739631a43034b822838985 (diff) | |
download | connman-ff88e68262afa40796e6efe71d3793ba1a1c4f5e.tar.gz connman-ff88e68262afa40796e6efe71d3793ba1a1c4f5e.tar.bz2 connman-ff88e68262afa40796e6efe71d3793ba1a1c4f5e.zip |
Ensure only one service connection attempt at a time
-rw-r--r-- | src/service.c | 12 |
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); |