summaryrefslogtreecommitdiff
path: root/plugins/neard.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2012-12-18 11:20:01 +0200
committerJohan Hedberg <johan.hedberg@intel.com>2012-12-18 11:20:01 +0200
commit1ff99151e058947fe2e531084645e0eef7a1afed (patch)
tree755b1e0eacf321edc00a44c5bd21600473d08043 /plugins/neard.c
parent34f32461e04b53df6523ac5fd15bff3e4cb7b7ab (diff)
downloadbluez-1ff99151e058947fe2e531084645e0eef7a1afed.tar.gz
neard: Fix agent reference leak
Diffstat (limited to 'plugins/neard.c')
-rw-r--r--plugins/neard.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/plugins/neard.c b/plugins/neard.c
index e1f358308..02c340397 100644
--- a/plugins/neard.c
+++ b/plugins/neard.c
@@ -599,7 +599,7 @@ static int check_adapter(struct btd_adapter *adapter)
if (btd_adapter_check_oob_handler(adapter))
return -EINPROGRESS;
- if (!btd_adapter_get_pairable(adapter) || !adapter_get_agent(adapter))
+ if (!btd_adapter_get_pairable(adapter))
return -ENONET;
if (!btd_adapter_ssp_enabled(adapter))
@@ -614,6 +614,7 @@ static DBusMessage *push_oob(DBusConnection *conn, DBusMessage *msg, void *data)
struct agent *agent;
struct oob_handler *handler;
bdaddr_t remote;
+ uint8_t io_cap;
int err;
DBG("");
@@ -633,9 +634,13 @@ static DBusMessage *push_oob(DBusConnection *conn, DBusMessage *msg, void *data)
return error_reply(msg, -err);
agent = adapter_get_agent(adapter);
+ if (!agent)
+ return error_reply(msg, -ENONET);
- err = adapter_create_bonding(adapter, &remote, BDADDR_BREDR,
- agent_get_io_capability(agent));
+ io_cap = agent_get_io_capability(agent);
+ agent_unref(agent);
+
+ err = adapter_create_bonding(adapter, &remote, BDADDR_BREDR, io_cap);
if (err < 0)
return error_reply(msg, -err);