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