Hi,

On Tue, 2014-08-05 at 10:42 +0000, Chengyi Zhao wrote:
> 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;
> +    }
> +

This one will work as well. But to avoid confusion, we'd like to call
__connman_service_connect() from everywhere in order to have one and
only one place in the code where all necessary checks are done.


Cheers,

        Patrik


_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman

Reply via email to