diff --git a/src/journal/journald-kmsg.c b/src/journal/journald-kmsg.c index 95163491c3..1344397cb8 100644 --- a/src/journal/journald-kmsg.c +++ b/src/journal/journald-kmsg.c @@ -429,6 +429,7 @@ int manager_open_kernel_seqnum(Manager *m) { int r; assert(m); + assert(!m->kernel_seqnum); /* We store the seqnum we last read in an mmapped file. That way we can just use it like a variable, * but it is persistent and automatically flushed at reboot. */ @@ -443,6 +444,13 @@ int manager_open_kernel_seqnum(Manager *m) { return 0; } +void manager_close_kernel_seqnum(Manager *m) { + assert(m); + + manager_unmap_seqnum_file(m->kernel_seqnum, sizeof(*m->kernel_seqnum)); + m->kernel_seqnum = NULL; +} + int manager_reload_dev_kmsg(Manager *m) { int r; diff --git a/src/journal/journald-kmsg.h b/src/journal/journald-kmsg.h index 51e5f34492..5429e9adcd 100644 --- a/src/journal/journald-kmsg.h +++ b/src/journal/journald-kmsg.h @@ -10,5 +10,6 @@ int manager_reload_dev_kmsg(Manager *m); void manager_forward_kmsg(Manager *m, int priority, const char *identifier, const char *message, const struct ucred *ucred); int manager_open_kernel_seqnum(Manager *m); +void manager_close_kernel_seqnum(Manager *m); void dev_kmsg_record(Manager *m, char *p, size_t l); diff --git a/src/journal/journald-manager.c b/src/journal/journald-manager.c index b74dcfa788..87102a5307 100644 --- a/src/journal/journald-manager.c +++ b/src/journal/journald-manager.c @@ -2107,7 +2107,7 @@ int manager_map_seqnum_file( return 0; } -static void manager_unmap_seqnum_file(void *p, size_t size) { +void manager_unmap_seqnum_file(void *p, size_t size) { assert(size > 0); if (!p) @@ -2599,7 +2599,7 @@ Manager* manager_free(Manager *m) { ordered_hashmap_free(m->ratelimit_groups_by_id); manager_unmap_seqnum_file(m->seqnum, sizeof(*m->seqnum)); - manager_unmap_seqnum_file(m->kernel_seqnum, sizeof(*m->kernel_seqnum)); + manager_close_kernel_seqnum(m); free(m->buffer); free(m->cgroup_root); diff --git a/src/journal/journald-manager.h b/src/journal/journald-manager.h index a9ef3f394f..6237c55d9f 100644 --- a/src/journal/journald-manager.h +++ b/src/journal/journald-manager.h @@ -192,3 +192,4 @@ int manager_start_or_stop_idle_timer(Manager *m); int manager_reload_journals(Manager *m); int manager_map_seqnum_file(Manager *m, const char *fname, size_t size, void **ret); +void manager_unmap_seqnum_file(void *p, size_t size);