Return-Path: From: Szymon Janc To: Luiz Augusto von Dentz Cc: linux-bluetooth@vger.kernel.org Subject: Re: [PATCH BlueZ] core/profile: Fix calling service_accept Date: Mon, 24 Oct 2016 21:19:24 +0200 Message-ID: <3713727.Nn5RnqlORS@ix> In-Reply-To: <1477326777-26717-1-git-send-email-luiz.dentz@gmail.com> References: <1477326777-26717-1-git-send-email-luiz.dentz@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Sender: linux-bluetooth-owner@vger.kernel.org List-ID: Hi Luiz, On Monday, 24 October 2016 19:32:57 CEST Luiz Augusto von Dentz wrote: > From: Luiz Augusto von Dentz > > service_accept shall only be used with profiles that implement .accept > callback, to set connecting state directly use service_set_connecting > which does not require .accept to be implemented. > --- > src/profile.c | 2 +- > src/service.c | 19 +++++++++++++++++++ > src/service.h | 1 + > 3 files changed, 21 insertions(+), 1 deletion(-) > > diff --git a/src/profile.c b/src/profile.c > index c81a9f9..7c5318c 100644 > --- a/src/profile.c > +++ b/src/profile.c > @@ -1047,7 +1047,7 @@ static void ext_connect(GIOChannel *io, GError *err, > gpointer user_data) conn); > } > > - if (conn->service && service_accept(conn->service) < 0) > + if (conn->service && service_set_connecting(conn->service) < 0) > goto drop; > > if (send_new_connection(ext, conn)) > diff --git a/src/service.c b/src/service.c > index 20a41d0..207ffae 100644 > --- a/src/service.c > +++ b/src/service.c > @@ -214,6 +214,25 @@ done: > return 0; > } > > +int service_set_connecting(struct btd_service *service) > +{ > + switch (service->state) { > + case BTD_SERVICE_STATE_UNAVAILABLE: > + return -EINVAL; > + case BTD_SERVICE_STATE_DISCONNECTED: > + break; > + case BTD_SERVICE_STATE_CONNECTING: > + case BTD_SERVICE_STATE_CONNECTED: > + return 0; > + case BTD_SERVICE_STATE_DISCONNECTING: > + return -EBUSY; > + } > + > + change_state(service, BTD_SERVICE_STATE_CONNECTING, 0); > + > + return 0; > +} > + > int btd_service_connect(struct btd_service *service) > { > struct btd_profile *profile = service->profile; > diff --git a/src/service.h b/src/service.h > index c1f97f6..6f1edfb 100644 > --- a/src/service.h > +++ b/src/service.h > @@ -49,6 +49,7 @@ int service_probe(struct btd_service *service); > void service_remove(struct btd_service *service); > > int service_accept(struct btd_service *service); > +int service_set_connecting(struct btd_service *service); > > /* Connection control API */ > int btd_service_connect(struct btd_service *service); Applied, thanks. -- pozdrawiam Szymon Janc