summaryrefslogtreecommitdiffstats
path: root/hcid
diff options
context:
space:
mode:
Diffstat (limited to 'hcid')
-rw-r--r--hcid/dbus-rfcomm.c10
-rw-r--r--hcid/dbus-sdp.c7
2 files changed, 13 insertions, 4 deletions
diff --git a/hcid/dbus-rfcomm.c b/hcid/dbus-rfcomm.c
index 2aa93be8..d0c28cdb 100644
--- a/hcid/dbus-rfcomm.c
+++ b/hcid/dbus-rfcomm.c
@@ -613,8 +613,11 @@ static void rfcomm_conn_req_continue(sdp_record_t *rec, void *data, int err)
goto failed;
}
- if (!sdp_get_access_protos(rec, &protos))
+ if (!sdp_get_access_protos(rec, &protos)) {
ch = sdp_get_proto_port(protos, RFCOMM_UUID);
+ sdp_list_foreach(protos, (sdp_list_func_t)sdp_list_free, NULL);
+ sdp_list_free(protos, NULL);
+ }
if (ch == -1) {
error_record_does_not_exist(cdata->conn, cdata->msg);
goto failed;
@@ -851,8 +854,11 @@ static void rfcomm_bind_req_continue(sdp_record_t *rec, void *data, int err)
goto failed;
}
- if (!sdp_get_access_protos(rec, &protos))
+ if (!sdp_get_access_protos(rec, &protos)) {
ch = sdp_get_proto_port(protos, RFCOMM_UUID);
+ sdp_list_foreach(protos, (sdp_list_func_t)sdp_list_free, NULL);
+ sdp_list_free(protos, NULL);
+ }
if (ch == -1) {
error_record_does_not_exist(cdata->conn, cdata->msg);
goto failed;
diff --git a/hcid/dbus-sdp.c b/hcid/dbus-sdp.c
index a3a9bc27..6a919144 100644
--- a/hcid/dbus-sdp.c
+++ b/hcid/dbus-sdp.c
@@ -1516,6 +1516,10 @@ static void get_rec_with_handle_comp_cb(uint8_t type, uint16_t err,
failed:
get_record_data_call_cb(ctxt->priv, rec, cb_err);
+
+ /* FIXME: when start using cache don't free the service record */
+ if (rec)
+ sdp_record_free(rec);
get_record_data_free(ctxt->priv);
transaction_context_free(ctxt);
}
@@ -1598,7 +1602,6 @@ static void get_rec_with_uuid_comp_cb(uint8_t type, uint16_t err,
struct transaction_context *ctxt = udata;
get_record_data_t *d = ctxt->priv;
int csrc, tsrc, cb_err = 0;
- sdp_record_t *rec = NULL;
uint32_t *handle;
uint8_t *pdata;
@@ -1648,7 +1651,7 @@ static void get_rec_with_uuid_comp_cb(uint8_t type, uint16_t err,
return;
failed:
- get_record_data_call_cb(d, rec, cb_err);
+ get_record_data_call_cb(d, NULL, cb_err);
get_record_data_free(d);
transaction_context_free(ctxt);
}