Anything that uses hashmap_next() almost certainly cares about the order and needs to be a LinkedHashmap. --- src/journal/journal-internal.h | 2 +- src/journal/journalctl.c | 6 +++--- src/journal/sd-journal.c | 38 +++++++++++++++++++------------------- 3 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/src/journal/journal-internal.h b/src/journal/journal-internal.h index e591fb6..f33d9fd 100644 --- a/src/journal/journal-internal.h +++ b/src/journal/journal-internal.h @@ -100,7 +100,7 @@ struct sd_journal { char *path; char *prefix; - Hashmap *files; + LinkedHashmap *files; MMapCache *mmap; Location current_location; diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 328e40b..5c065f9 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -1488,7 +1488,7 @@ static int verify(sd_journal *j) { log_show_color(true); - HASHMAP_FOREACH(f, j->files, i) { + LINKED_HASHMAP_FOREACH(f, j->files, i) { int k; usec_t first, validated, last; @@ -1583,7 +1583,7 @@ static int access_check(sd_journal *j) { assert(j); if (set_isempty(j->errors)) { - if (hashmap_isempty(j->files)) + if (linked_hashmap_isempty(j->files)) log_notice("No journal files were found."); return 0; } @@ -1615,7 +1615,7 @@ static int access_check(sd_journal *j) { } #endif - if (hashmap_isempty(j->files)) { + if (linked_hashmap_isempty(j->files)) { log_error("No journal files were opened due to insufficient permissions."); r = -EACCES; } diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c index 479444c..cf4ac56 100644 --- a/src/journal/sd-journal.c +++ b/src/journal/sd-journal.c @@ -86,7 +86,7 @@ static void detach_location(sd_journal *j) { j->current_file = NULL; j->current_field = 0; - HASHMAP_FOREACH(f, j->files, i) + LINKED_HASHMAP_FOREACH(f, j->files, i) f->current_offset = 0; } @@ -881,7 +881,7 @@ static int real_journal_next(sd_journal *j, direction_t direction) { assert_return(j, -EINVAL); assert_return(!journal_pid_changed(j), -ECHILD); - HASHMAP_FOREACH(f, j->files, i) { + LINKED_HASHMAP_FOREACH(f, j->files, i) { bool found; r = next_beyond_location(j, f, direction, &o, &p); @@ -1290,10 +1290,10 @@ static int add_any_file(sd_journal *j, const char *path) { assert(j); assert(path); - if (hashmap_get(j->files, path)) + if (linked_hashmap_get(j->files, path)) return 0; - if (hashmap_size(j->files) >= JOURNAL_FILES_MAX) { + if (linked_hashmap_size(j->files) >= JOURNAL_FILES_MAX) { log_warning("Too many open journal files, not adding %s.", path); return set_put_error(j, -ETOOMANYREFS); } @@ -1304,7 +1304,7 @@ static int add_any_file(sd_journal *j, const char *path) { /* journal_file_dump(f); */ - r = hashmap_put(j->files, f->path, f); + r = linked_hashmap_put(j->files, f->path, f); if (r < 0) { journal_file_close(f); return r; @@ -1353,7 +1353,7 @@ static int remove_file(sd_journal *j, const char *prefix, const char *filename) if (!path) return -ENOMEM; - f = hashmap_get(j->files, path); + f = linked_hashmap_get(j->files, path); if (!f) return 0; @@ -1365,7 +1365,7 @@ static void remove_file_real(sd_journal *j, JournalFile *f) { assert(j); assert(f); - hashmap_remove(j->files, f->path); + linked_hashmap_remove(j->files, f->path); log_debug("File %s removed.", f->path); @@ -1376,7 +1376,7 @@ static void remove_file_real(sd_journal *j, JournalFile *f) { if (j->unique_file == f) { /* Jump to the next unique_file or NULL if that one was last */ - j->unique_file = hashmap_next(j->files, j->unique_file->path); + j->unique_file = linked_hashmap_next(j->files, j->unique_file->path); j->unique_offset = 0; if (!j->unique_file) j->unique_file_lost = true; @@ -1636,7 +1636,7 @@ static int add_current_paths(sd_journal *j) { * "root" directories. We don't expect errors here, so we * treat them as fatal. */ - HASHMAP_FOREACH(f, j->files, i) { + LINKED_HASHMAP_FOREACH(f, j->files, i) { _cleanup_free_ char *dir; int r; @@ -1691,7 +1691,7 @@ static sd_journal *journal_new(int flags, const char *path) { goto fail; } - j->files = hashmap_new(&string_hash_ops); + j->files = linked_hashmap_new(&string_hash_ops); j->directories_by_path = hashmap_new(&string_hash_ops); j->mmap = mmap_cache_new(); if (!j->files || !j->directories_by_path || !j->mmap) @@ -1837,10 +1837,10 @@ _public_ void sd_journal_close(sd_journal *j) { sd_journal_flush_matches(j); - while ((f = hashmap_steal_first(j->files))) + while ((f = linked_hashmap_steal_first(j->files))) journal_file_close(f); - hashmap_free(j->files); + linked_hashmap_free(j->files); while ((d = hashmap_first(j->directories_by_path))) remove_directory(j, d); @@ -2370,7 +2370,7 @@ _public_ int sd_journal_get_cutoff_realtime_usec(sd_journal *j, uint64_t *from, assert_return(from || to, -EINVAL); assert_return(from != to, -EINVAL); - HASHMAP_FOREACH(f, j->files, i) { + LINKED_HASHMAP_FOREACH(f, j->files, i) { usec_t fr, t; r = journal_file_get_cutoff_realtime_usec(f, &fr, &t); @@ -2410,7 +2410,7 @@ _public_ int sd_journal_get_cutoff_monotonic_usec(sd_journal *j, sd_id128_t boot assert_return(from || to, -EINVAL); assert_return(from != to, -EINVAL); - HASHMAP_FOREACH(f, j->files, i) { + LINKED_HASHMAP_FOREACH(f, j->files, i) { usec_t fr, t; r = journal_file_get_cutoff_monotonic_usec(f, boot_id, &fr, &t); @@ -2445,7 +2445,7 @@ void journal_print_header(sd_journal *j) { assert(j); - HASHMAP_FOREACH(f, j->files, i) { + LINKED_HASHMAP_FOREACH(f, j->files, i) { if (newline) putchar('\n'); else @@ -2464,7 +2464,7 @@ _public_ int sd_journal_get_usage(sd_journal *j, uint64_t *bytes) { assert_return(!journal_pid_changed(j), -ECHILD); assert_return(bytes, -EINVAL); - HASHMAP_FOREACH(f, j->files, i) { + LINKED_HASHMAP_FOREACH(f, j->files, i) { struct stat st; if (fstat(f->fd, &st) < 0) @@ -2513,7 +2513,7 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_ if (j->unique_file_lost) return 0; - j->unique_file = hashmap_first(j->files); + j->unique_file = linked_hashmap_first(j->files); if (!j->unique_file) return 0; @@ -2547,7 +2547,7 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_ /* We reached the end of the list? Then start again, with the next file */ if (j->unique_offset == 0) { - j->unique_file = hashmap_next(j->files, j->unique_file->path); + j->unique_file = linked_hashmap_next(j->files, j->unique_file->path); if (!j->unique_file) return 0; @@ -2596,7 +2596,7 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_ * object by checking if it exists in the earlier * traversed files. */ found = false; - HASHMAP_FOREACH(of, j->files, i) { + LINKED_HASHMAP_FOREACH(of, j->files, i) { Object *oo; uint64_t op; -- 2.1.0 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel