Hi Patrik,
> From: [email protected]
> To: [email protected]
> Subject: [PATCH] service: Fix service disconnection when using the same index
> Date: Tue, 5 Aug 2014 13:12:56 +0300
>
> When a service is to be connected, other service(s) using the same
> interface will be disconnected. Fix the already connected or connecting
> situation by ignoring the service in question when seen in the list.
>
> Simplify the index detection and signal a timeout when disconnect needs
> to happen first in order to indicate to the caller that the connect
> action needs to be redone.
>
I think whether we can fix this issue with the following patch, ConnMan only
checks the service state when entered the function "connect_service", please
review.
src/service.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/src/service.c b/src/service.c
index 9406bc3..9740738 100644
--- a/src/service.c
+++ b/src/service.c
@@ -3957,6 +3957,16 @@ static DBusMessage *connect_service(DBusConnection *conn,
if (service->pending)
return __connman_error_in_progress(msg);
+ if (is_connected(service)) {
+ err = -EISCONN;
+ goto done;
+ }
+
+ if (is_connecting(service)) {
+ err = -EALREADY;
+ goto done;
+ }
+
for (list = service_list; list; list = list->next) {
struct connman_service *temp = list->data;
@@ -3994,6 +4004,7 @@ static DBusMessage *connect_service(DBusConnection *conn,
service->pending = NULL;
}
+done:
if (err < 0)
return __connman_error_failed(msg, -err);
Thanks,
Chengyi
_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman