summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-09-13 17:24:20 +0200
committerMarcel Holtmann <marcel@holtmann.org>2009-09-13 17:24:20 +0200
commitd51fb7b022ba0c6ffce27028499a047072885f36 (patch)
tree59753648f63de47631faa14e866c9d0b819b0373 /src
parentff8c05164d2dd921e908454fe407499f75718767 (diff)
downloadconnman-d51fb7b022ba0c6ffce27028499a047072885f36.tar.gz
connman-d51fb7b022ba0c6ffce27028499a047072885f36.tar.bz2
connman-d51fb7b022ba0c6ffce27028499a047072885f36.zip
Fix issue with not triggering auto-connect in some cases
Diffstat (limited to 'src')
-rw-r--r--src/service.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/service.c b/src/service.c
index aa34684c..1935bc65 100644
--- a/src/service.c
+++ b/src/service.c
@@ -48,6 +48,7 @@ struct connman_service {
connman_bool_t hidden;
connman_bool_t ignore;
connman_bool_t autoconnect;
+ connman_bool_t userconnect;
GTimeVal modified;
unsigned int order;
char *name;
@@ -661,8 +662,10 @@ void __connman_service_auto_connect(void)
iter = g_sequence_iter_next(iter);
}
- if (service != NULL)
+ if (service != NULL) {
+ service->userconnect = FALSE;
__connman_service_connect(service);
+ }
}
static void reply_pending(struct connman_service *service, int error)
@@ -692,7 +695,7 @@ static void reply_pending(struct connman_service *service, int error)
static gboolean connect_timeout(gpointer user_data)
{
struct connman_service *service = user_data;
- connman_bool_t auto_connect = FALSE;
+ connman_bool_t autoconnect = FALSE;
DBG("service %p", service);
@@ -715,12 +718,12 @@ static gboolean connect_timeout(gpointer user_data)
dbus_message_unref(service->pending);
service->pending = NULL;
} else
- auto_connect = TRUE;
+ autoconnect = TRUE;
__connman_service_indicate_state(service,
CONNMAN_SERVICE_STATE_FAILURE);
- if (auto_connect == TRUE)
+ if (autoconnect == TRUE && service->userconnect == FALSE)
__connman_service_auto_connect();
return FALSE;
@@ -752,6 +755,8 @@ static DBusMessage *connect_service(DBusConnection *conn,
service->ignore = FALSE;
+ service->userconnect = TRUE;
+
service->pending = dbus_message_ref(msg);
err = __connman_service_connect(service);
@@ -986,6 +991,8 @@ static void __connman_service_initialize(struct connman_service *service)
service->ignore = FALSE;
+ service->userconnect = FALSE;
+
service->order = 0;
}
@@ -1166,6 +1173,8 @@ int __connman_service_indicate_state(struct connman_service *service,
reply_pending(service, 0);
+ service->userconnect = FALSE;
+
g_get_current_time(&service->modified);
__connman_storage_save_service(service);
@@ -1181,6 +1190,9 @@ int __connman_service_indicate_state(struct connman_service *service,
if (state == CONNMAN_SERVICE_STATE_FAILURE) {
reply_pending(service, EIO);
+ if (service->userconnect == FALSE)
+ __connman_service_auto_connect();
+
g_get_current_time(&service->modified);
__connman_storage_save_service(service);
} else
@@ -1530,6 +1542,8 @@ done:
service->passphrase = g_strdup(passphrase);
}
+ service->userconnect = TRUE;
+
err = __connman_service_connect(service);
if (err < 0 && err != -EINPROGRESS)
goto failed;