From 1cabce7f04775990533bc8e066497e456350249a Mon Sep 17 00:00:00 2001 From: Vo Trung Chi Date: Wed, 16 Oct 2019 15:28:19 +0200 Subject: libdlt: fix memory leak This commit is fixed the memory leak in case the dlt application do reattach to the daemon. Signed-off-by: Vo Trung Chi --- src/shared/dlt_common.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'src/shared') diff --git a/src/shared/dlt_common.c b/src/shared/dlt_common.c index 4b56fc1..b699ad3 100644 --- a/src/shared/dlt_common.c +++ b/src/shared/dlt_common.c @@ -1855,19 +1855,31 @@ DltReturnValue dlt_vnlog(int prio, size_t size, const char *format, ...) DltReturnValue dlt_receiver_init(DltReceiver *receiver, int fd, int buffersize) { - if (receiver == NULL) + if (NULL == receiver) return DLT_RETURN_WRONG_PARAMETER; - receiver->lastBytesRcvd = 0; - receiver->bytesRcvd = 0; - receiver->totalBytesRcvd = 0; - receiver->buffersize = buffersize; receiver->fd = fd; - receiver->buffer = (char *)malloc(receiver->buffersize); - receiver->backup_buf = NULL; - if (receiver->buffer == NULL) { + /** Reuse the receiver buffer if it exists and the buffer size + * is not changed. If not, free the old one and allocate a new buffer. + */ + if ((NULL != receiver->buffer) && (buffersize != receiver->buffersize)) { + free(receiver->buffer); + receiver->buffer = NULL; + } + + if (NULL == receiver->buffer) { + receiver->lastBytesRcvd = 0; + receiver->bytesRcvd = 0; + receiver->totalBytesRcvd = 0; receiver->buf = NULL; + receiver->backup_buf = NULL; + receiver->buffer = (char *)calloc(1, buffersize); + receiver->buffersize = buffersize; + } + + if (NULL == receiver->buffer) { + dlt_log(LOG_ERR, "allocate memory for receiver buffer failed.\n"); return DLT_RETURN_ERROR; } else { -- cgit v1.2.1