summaryrefslogtreecommitdiff
path: root/src/lib/cdap.c
diff options
context:
space:
mode:
authorSander Vrijders <sander.vrijders@ugent.be>2017-03-30 12:14:38 +0200
committerSander Vrijders <sander.vrijders@ugent.be>2017-03-30 12:14:38 +0200
commitcd6801dc8746a79cfc116f3e73fc3afc5276a127 (patch)
tree18771e2745c9c2c6162118f15b7cb5abc35a9ed9 /src/lib/cdap.c
parent19d90d59b5b3c76bb9c67e6a78ff286f3529c6ee (diff)
downloadouroboros-cd6801dc8746a79cfc116f3e73fc3afc5276a127.tar.gz
ouroboros-cd6801dc8746a79cfc116f3e73fc3afc5276a127.zip
lib: Fix invalid access in CDAP
This fixes an invalid access to an object that was already freed.
Diffstat (limited to 'src/lib/cdap.c')
-rw-r--r--src/lib/cdap.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/lib/cdap.c b/src/lib/cdap.c
index 54a5b262..38806c23 100644
--- a/src/lib/cdap.c
+++ b/src/lib/cdap.c
@@ -703,6 +703,7 @@ int cdap_reply_wait(struct cdap * instance,
{
int ret;
struct cdap_req * r;
+ invoke_id_t iid;
if (instance == NULL || (data != NULL && len == NULL))
return -EINVAL;
@@ -711,10 +712,12 @@ int cdap_reply_wait(struct cdap * instance,
if (r == NULL)
return -EINVAL;
+ iid = r->iid;
+
ret = cdap_req_wait(r);
if (ret < 0) {
cdap_sent_del(instance, r);
- release_id(instance, r->iid);
+ release_id(instance, iid);
return ret;
}
@@ -727,8 +730,8 @@ int cdap_reply_wait(struct cdap * instance,
ret = r->response;
- release_id(instance, r->iid);
cdap_sent_del(instance, r);
+ release_id(instance, iid);
return ret;
}