summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/journal/journald.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/journal/journald.c b/src/journal/journald.c
index b42be8d7ad..47fe6edb0c 100644
--- a/src/journal/journald.c
+++ b/src/journal/journald.c
@@ -306,14 +306,11 @@ static JournalFile* find_journal(Server *s, uid_t uid) {
return f;
}
-static void server_vacuum(Server *s) {
- Iterator i;
+static void server_rotate(Server *s) {
+ JournalFile *f;
void *k;
- char *p;
- char ids[33];
- sd_id128_t machine;
+ Iterator i;
int r;
- JournalFile *f;
log_info("Rotating...");
@@ -336,6 +333,13 @@ static void server_vacuum(Server *s) {
else
hashmap_replace(s->user_journals, k, f);
}
+}
+
+static void server_vacuum(Server *s) {
+ char *p;
+ char ids[33];
+ sd_id128_t machine;
+ int r;
log_info("Vacuuming...");
@@ -565,6 +569,7 @@ retry:
if (r == -E2BIG && !vacuumed) {
log_info("Allocation limit reached.");
+ server_rotate(s);
server_vacuum(s);
vacuumed = true;
@@ -1308,6 +1313,7 @@ static int server_flush_to_var(Server *s) {
log_info("Allocation limit reached.");
journal_file_post_change(s->system_journal);
+ server_rotate(s);
server_vacuum(s);
r = journal_file_copy_entry(f, s->system_journal, o, f->current_offset, NULL, NULL, NULL);