From e2716ae2c5e6a4a5b0eda49f8fd724c440c438d8 Mon Sep 17 00:00:00 2001 From: mjbudd77 Date: Sat, 24 Apr 2021 13:57:20 -0400 Subject: [PATCH] Fixed segmentation fault in Qt trace logger when changing from a large buffer size to a smaller buffer size. Ensure that buffer head and tail pointers are reset as well. Fixed memory leak with old trace log buffer not being freed when allocating the new buffer size. --- src/drivers/Qt/TraceLogger.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/drivers/Qt/TraceLogger.cpp b/src/drivers/Qt/TraceLogger.cpp index 886bb540..3531575c 100644 --- a/src/drivers/Qt/TraceLogger.cpp +++ b/src/drivers/Qt/TraceLogger.cpp @@ -967,6 +967,11 @@ int initTraceLogBuffer(int maxRecs) size = maxRecs * sizeof(traceRecord_t); + if ( recBuf != NULL ) + { + free(recBuf); recBuf = NULL; + } + recBuf = (traceRecord_t *)malloc(size); if (recBuf) @@ -978,6 +983,7 @@ int initTraceLogBuffer(int maxRecs) { recBufMax = 0; } + recBufHead = recBufTail = 0; } return recBuf == NULL; } @@ -1001,9 +1007,13 @@ static void pushToLogBuffer(traceRecord_t &rec) recBuf[recBufHead] = rec; recBufHead = (recBufHead + 1) % recBufMax; - if (recBufHead == recBufTail) - { - printf("Trace Log Overrun!!!\n"); + if ( logging ) + { // Warning that an buffer overrun has occurred, + // This means that some instructions have not been written to the log. + if (recBufHead == recBufTail) + { + printf("Trace Log Overrun!!!\n"); + } } } //----------------------------------------------------