summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2007-04-20 15:41:32 +0000
committerLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2007-04-20 15:41:32 +0000
commit36d0506a28a2413467d2c5e793d53c45b2183d34 (patch)
treee4673ea0514fe496ae288f5b9c5b52f81b147dba
parentf5dcb96ae5e257efc4dc9cdd510119e9788d1228 (diff)
Check connection busy before removing it.
-rw-r--r--network/connection.c11
-rw-r--r--network/connection.h1
-rw-r--r--network/manager.c3
3 files changed, 15 insertions, 0 deletions
diff --git a/network/connection.c b/network/connection.c
index c31c423a..e3b85929 100644
--- a/network/connection.c
+++ b/network/connection.c
@@ -698,3 +698,14 @@ int connection_find_data(DBusConnection *conn,
return -1;
}
+
+gboolean connection_has_pending(DBusConnection *conn, const char *path)
+{
+ struct network_conn *nc;
+
+ if (!dbus_connection_get_object_path_data(conn, path, (void *) &nc))
+ return FALSE;
+
+ return (nc->state == CONNECTING);
+}
+
diff --git a/network/connection.h b/network/connection.h
index b03c3caa..205e44da 100644
--- a/network/connection.h
+++ b/network/connection.h
@@ -26,3 +26,4 @@ int connection_register(DBusConnection *conn, const char *path, bdaddr_t *src,
int connection_store(DBusConnection *conn, const char *path);
int connection_find_data(DBusConnection *conn, const char *path,
const char *pattern);
+gboolean connection_has_pending(DBusConnection *conn, const char *path);
diff --git a/network/manager.c b/network/manager.c
index 898a183b..65d8634b 100644
--- a/network/manager.c
+++ b/network/manager.c
@@ -164,6 +164,9 @@ static DBusHandlerResult remove_path(DBusConnection *conn,
if (!l)
return err_does_not_exist(conn, msg, "Path doesn't exist");
+ if (*list == connection_paths && connection_has_pending (conn, path))
+ return err_failed(conn, msg, "Connection is Busy");
+
g_free(l->data);
*list = g_slist_remove(*list, l->data);