Diff between 75b0bf3ddb293747d5a1b3dce445536a862c0c07 and b669604f43bbbf04ebaa66dd14ad9cfb005e561b

Changed Files

File Additions Deletions Status
src/profile.c +4 -2 modified
src/service.c +7 -4 modified

Full Patch

diff --git a/src/profile.c b/src/profile.c
index ca1dfec..4e68afc 100644
--- a/src/profile.c
+++ b/src/profile.c
@@ -1036,8 +1036,10 @@ static void ext_connect(GIOChannel *io, GError *err, gpointer user_data)
 									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
@@ -185,16 +185,20 @@ int service_accept(struct btd_service *service)
 	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)
@@ -336,8 +340,7 @@ bool btd_service_remove_state_cb(unsigned int id)
 
 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)