diff --git a/src/logger_history.c b/src/logger_history.c index 6ae10d4aa0f655a9db9241c6764e37a3d7a97cad..f75686e748e81f1783b87dc7173b11396a7787d7 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 cee7db5b4ad6c1b9baac559157f5059190c5702d..05df5044c89cd081137dfba71a094a58b2aa778f 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);