From 4179ed6c19099d447877ca78b269bfc59a44d102 Mon Sep 17 00:00:00 2001 From: Julian Oes Date: Tue, 29 Mar 2016 19:33:45 +0200 Subject: [PATCH] sdlog2: don't free the logbuffer after disarm Only free the logbuffer if you exit sdlog2. After disarming, just reset the pointers. This way, we don't take any risks doing malloc and free. The actual "double free" was caused by trying to free the perf counter inside logbuffer_free. --- src/modules/sdlog2/sdlog2.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/modules/sdlog2/sdlog2.c b/src/modules/sdlog2/sdlog2.c index d72f1ea68b..41bbc72b9a 100644 --- a/src/modules/sdlog2/sdlog2.c +++ b/src/modules/sdlog2/sdlog2.c @@ -807,8 +807,8 @@ void sdlog2_stop_log() /* free log writer performance counter */ perf_free(perf_write); - /* free log buffer */ - logbuffer_free(&lb); + /* reset the logbuffer */ + logbuffer_reset(&lb); mavlink_and_console_log_info(&mavlink_log_pub, "[blackbox] stopped (%lu drops)", skipped_count); @@ -2136,7 +2136,8 @@ int sdlog2_thread_main(int argc, char *argv[]) pthread_mutex_destroy(&logbuffer_mutex); pthread_cond_destroy(&logbuffer_cond); - free(lb.data); + /* free log buffer */ + logbuffer_free(&lb); thread_running = false;