From 16e9f408fa9a9626059bdd6c89dc175e06b9e976 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 14 Aug 2012 22:02:24 +0200 Subject: journal: implement generic sharable mmap caching logic instead of having one simple per-file cache implement an more comprehensive one that works for multiple files and can actually maintain multiple maps per file and per object type. --- src/journal/sd-journal.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/journal/sd-journal.c') diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c index 359a7cac3e..41526b35bf 100644 --- a/src/journal/sd-journal.c +++ b/src/journal/sd-journal.c @@ -1118,7 +1118,7 @@ static int add_file(sd_journal *j, const char *prefix, const char *filename) { return 0; } - r = journal_file_open(path, O_RDONLY, 0, false, false, NULL, NULL, &f); + r = journal_file_open(path, O_RDONLY, 0, false, false, NULL, j->mmap, NULL, &f); free(path); if (r < 0) { @@ -1439,6 +1439,17 @@ static sd_journal *journal_new(int flags, const char *path) { return NULL; } + /* One context for each type, plus the zeroth catchall + * context. One fd for each file plus one for each type, which + * is need when verifying things */ + j->mmap = mmap_cache_new(_OBJECT_TYPE_MAX, JOURNAL_FILES_MAX + _OBJECT_TYPE_MAX); + if (!j->mmap) { + hashmap_free(j->files); + hashmap_free(j->directories_by_path); + free(j->path); + free(j); + } + return j; } @@ -1527,6 +1538,9 @@ _public_ void sd_journal_close(sd_journal *j) { sd_journal_flush_matches(j); + if (j->mmap) + mmap_cache_unref(j->mmap); + free(j->path); free(j); } -- cgit v1.2.3-54-g00ecf