diff --git a/src/device.c b/src/device.c
index e76b8bb..9021914 100644
--- a/src/device.c
+++ b/src/device.c
while (dev->pending) {
service = dev->pending->data;
- if (btd_service_connect(service) == 0)
+ err = btd_service_connect(service);
+ if (!err)
return 0;
dev->pending = g_slist_delete_link(dev->pending, dev->pending);
}
err = connect_next(dev);
- if (err < 0)
+ if (err < 0) {
+ if (err == -EALREADY)
+ return dbus_message_new_method_return(msg);
return btd_error_failed(msg, strerror(-err));
+ }
dev->connect = dbus_message_ref(msg);
diff --git a/src/service.c b/src/service.c
index 3d07744..f7912f5 100644
--- a/src/service.c
+++ b/src/service.c
case BTD_SERVICE_STATE_DISCONNECTED:
break;
case BTD_SERVICE_STATE_CONNECTING:
+ return 0;
case BTD_SERVICE_STATE_CONNECTED:
return -EALREADY;
case BTD_SERVICE_STATE_DISCONNECTING: