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

Reply via email to