X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=session_driver.c;h=4c7082cac00b3de4257a7014b5008e1c84b091fa;hb=3520422fc761d50830a45a43cd7d34cca589ad1b;hp=b7a10a0f93337457d4bf7994cc12273e87333627;hpb=8f996b89481670219c7576e2c68b128a0a2ce026;p=libsigrok.git diff --git a/session_driver.c b/session_driver.c index b7a10a0f..4c7082ca 100644 --- a/session_driver.c +++ b/session_driver.c @@ -81,11 +81,6 @@ static int receive_data(int fd, int revents, void *cb_data) /* Already done with this instance. */ continue; - if (!(buf = g_try_malloc(CHUNKSIZE))) { - sr_err("%s: buf malloc failed", __func__); - return FALSE; - } - if (!vdev->capfile) { /* No capture file opened yet, or finished with the last * chunked one. */ @@ -133,6 +128,11 @@ static int receive_data(int fd, int revents, void *cb_data) } } + if (!(buf = g_try_malloc(CHUNKSIZE))) { + sr_err("%s: buf malloc failed", __func__); + return FALSE; + } + ret = zip_fread(vdev->capfile, buf, CHUNKSIZE); if (ret > 0) { got_data = TRUE; @@ -155,9 +155,11 @@ static int receive_data(int fd, int revents, void *cb_data) } else { /* There might be more chunks, so don't fall through * to the SR_DF_END here. */ + g_free(buf); return TRUE; } } + g_free(buf); } if (!got_data) {