diff --git a/src/profile.c b/src/profile.c
index ca1dfec..4e68afc 100644
--- a/src/profile.c
+++ b/src/profile.c
conn);
}
- if (send_new_connection(ext, conn))
- return;
+ if (conn->service && service_accept(conn->service) == 0) {
+ if (send_new_connection(ext, conn))
+ return;
+ }
drop:
if (conn->service)
diff --git a/src/service.c b/src/service.c
index 4d1f1cb..cae2804 100644
--- a/src/service.c
+++ b/src/service.c
int err;
if (!service->profile->accept)
- return 0;
+ goto done;
err = service->profile->accept(service);
if (!err)
- return 0;
+ goto done;
ba2str(device_get_address(service->device), addr);
error("%s profile accept failed for %s", service->profile->name, addr);
return err;
+
+done:
+ change_state(service, BTD_SERVICE_STATE_CONNECTING, 0);
+ return 0;
}
int btd_service_connect(struct btd_service *service)
void btd_service_connecting_complete(struct btd_service *service, int err)
{
- if (service->state != BTD_SERVICE_STATE_DISCONNECTED &&
- service->state != BTD_SERVICE_STATE_CONNECTING)
+ if (service->state != BTD_SERVICE_STATE_CONNECTING)
return;
if (err == 0)