diff --git a/degesch.c b/degesch.c index 5ac89c1..1ff89c9 100644 --- a/degesch.c +++ b/degesch.c @@ -82,6 +82,9 @@ enum /// Some arbitrary limit for the history file #define HISTORY_LIMIT 10000 +/// How many lines of backlog to store in memory +#define BACKLOG_LIMIT 1000 + /// Characters that separate words #define WORD_BREAKING_CHARS " \f\n\r\t\v" @@ -2725,6 +2728,14 @@ log_formatter (struct app_context *ctx, if (!buffer) buffer = ctx->global_buffer; + if (buffer->lines_count >= BACKLOG_LIMIT) + { + struct buffer_line *popped = buffer->lines; + LIST_UNLINK_WITH_TAIL (buffer->lines, buffer->lines_tail, popped); + buffer_line_destroy (popped); + buffer->lines_count--; + } + struct buffer_line *line = buffer_line_new (); line->flags = flags; line->when = time (NULL);