From 9a58b0f95a441efb62d28ec7253760ae737d571a Mon Sep 17 00:00:00 2001 From: loikki <loic.hausammann@protonmail.ch> Date: Mon, 30 Nov 2020 11:09:39 +0100 Subject: [PATCH] Logger history thread safe --- src/logger_history.c | 8 ++++++++ src/logger_history.h | 3 +++ 2 files changed, 11 insertions(+) diff --git a/src/logger_history.c b/src/logger_history.c index 6ae10d4aa0..f75686e748 100644 --- a/src/logger_history.c +++ b/src/logger_history.c @@ -41,6 +41,7 @@ void logger_history_init(struct logger_history *hist) { /* Set the counters to their initial value */ hist->size = 0; hist->capacity = LOGGER_HISTORY_INIT_SIZE; + lock_init(hist->lock); hist->data = (struct logger_index_data *)swift_malloc( "logger_history", @@ -73,6 +74,7 @@ void logger_history_free(struct logger_history *hist) { /* Set the counters to 0 */ hist->size = 0; hist->capacity = 0; + lock_destroy(hist->lock); /* Free the memory */ if (hist->data != NULL) { @@ -99,6 +101,9 @@ void logger_history_log(struct logger_history *hist, const long long id, #endif const struct logger_index_data data = {id, last_offset}; + /* Lock the history */ + lock_lock(hist->lock); + /* Check if enough space is left */ if (hist->size == hist->capacity) { /* Compute the previous amount of memory */ @@ -123,6 +128,9 @@ void logger_history_log(struct logger_history *hist, const long long id, /* Increase the element counter */ hist->size += 1; + + /* Unlock the history. */ + lock_unlock(hist->lock); } /** diff --git a/src/logger_history.h b/src/logger_history.h index cee7db5b4a..05df5044c8 100644 --- a/src/logger_history.h +++ b/src/logger_history.h @@ -65,6 +65,9 @@ struct logger_history { /* Buffer containing the particles */ struct logger_index_data *data; + + /*! Spin lock for logging events. */ + swift_lock_type lock; }; void logger_history_init(struct logger_history *hist); -- GitLab