summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2013-12-10 10:41:16 +0200
committerJohan Hedberg <johan.hedberg@intel.com>2013-12-10 11:30:14 +0200
commitd7887a4a0fcd09fe1dc5647f10ec46abc60e948e (patch)
treebde98260a6a8af616d20aba42264798ea2c139b2 /src
parente6b5ba499a0729fbd9666ab712e2e7fe84dbd8fc (diff)
core: Fix not replying to DisconnectProfile
btd_service_disconnect may cause a service to disconnect before returning which cause dev->disconnect to be set after device_profile_disconnected.
Diffstat (limited to 'src')
-rw-r--r--src/device.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/device.c b/src/device.c
index d7a00ec1e..953a33855 100644
--- a/src/device.c
+++ b/src/device.c
@@ -1434,11 +1434,14 @@ static DBusMessage *disconnect_profile(DBusConnection *conn, DBusMessage *msg,
if (!service)
return btd_error_invalid_args(msg);
+ dev->disconnect = dbus_message_ref(msg);
+
err = btd_service_disconnect(service);
- if (err == 0) {
- dev->disconnect = dbus_message_ref(msg);
+ if (err == 0)
return NULL;
- }
+
+ dbus_message_unref(dev->disconnect);
+ dev->disconnect = NULL;
if (err == -ENOTSUP)
return btd_error_not_supported(msg);