summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Bursztyka <tomasz.bursztyka@linux.intel.com>2012-04-17 10:10:07 +0300
committerPatrik Flykt <patrik.flykt@linux.intel.com>2012-04-17 13:37:42 +0300
commit68395ea0e0469a8012486f866aeb476d55766702 (patch)
tree44ff38089dde8475c59eb16cb5edbe8e352497f0
parent1f29bcea3f72f461d402a6ba439f6a50ed370a36 (diff)
downloadconnman-68395ea0e0469a8012486f866aeb476d55766702.tar.gz
connman-68395ea0e0469a8012486f866aeb476d55766702.tar.bz2
connman-68395ea0e0469a8012486f866aeb476d55766702.zip
service: Schedule auto connect procedure to be ran on its own
-rw-r--r--src/service.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/src/service.c b/src/service.c
index 5805bfcb..b3644b0f 100644
--- a/src/service.c
+++ b/src/service.c
@@ -43,6 +43,8 @@ static GSequence *service_list = NULL;
static GHashTable *service_hash = NULL;
static GSList *counter_list = NULL;
+static unsigned int autoconnect_timeout = 0;
+
struct connman_stats {
connman_bool_t valid;
connman_bool_t enabled;
@@ -3164,17 +3166,14 @@ static connman_bool_t auto_connect_service(GSequenceIter* iter,
return FALSE;
}
-void __connman_service_auto_connect(void)
+static gboolean run_auto_connect(gpointer data)
{
GSequenceIter *iter = NULL;
GSequence *preferred_tech;
- DBG("");
+ autoconnect_timeout = 0;
- if (__connman_session_mode() == TRUE) {
- DBG("Session mode enabled: auto connect disabled");
- return;
- }
+ DBG("");
preferred_tech = preferred_tech_list_get(service_list);
if (preferred_tech != NULL)
@@ -3188,6 +3187,23 @@ void __connman_service_auto_connect(void)
if (preferred_tech != NULL)
g_sequence_free(preferred_tech);
+
+ return FALSE;
+}
+
+void __connman_service_auto_connect(void)
+{
+ DBG("");
+
+ if (__connman_session_mode() == TRUE) {
+ DBG("Session mode enabled: auto connect disabled");
+ return;
+ }
+
+ if (autoconnect_timeout != 0)
+ return;
+
+ autoconnect_timeout = g_timeout_add_seconds(0, run_auto_connect, NULL);
}
static void remove_timeout(struct connman_service *service)
@@ -5949,6 +5965,11 @@ void __connman_service_cleanup(void)
DBG("");
+ if (autoconnect_timeout != 0) {
+ g_source_remove(autoconnect_timeout);
+ autoconnect_timeout = 0;
+ }
+
list = service_list;
service_list = NULL;
g_sequence_free(list);