chiark / gitweb /
machinectl: fix handling of --verify= argument for dkr downloads
[elogind.git] / src / journal / sd-journal.c
index 173f9484e75a854a9e0b0e54c0e2f0a612ed1f2d..0268675abbd5fcf0bb471ba93a6fb41969cb7e34 100644 (file)
@@ -43,8 +43,6 @@
 #include "replace-var.h"
 #include "fileio.h"
 
-#define JOURNAL_FILES_MAX 1024
-
 #define JOURNAL_FILES_RECHECK_USEC (2 * USEC_PER_SEC)
 
 #define REPLACE_VAR_MAX 256
@@ -697,23 +695,22 @@ static int next_with_matches(
                 Object **ret,
                 uint64_t *offset) {
 
-        uint64_t cp;
-
         assert(j);
         assert(f);
         assert(ret);
         assert(offset);
 
-        cp = *offset;
-
         /* No matches is easy. We simple advance the file
          * pointer by one. */
         if (!j->level0)
-                return journal_file_next_entry(f, cp, direction, ret, offset);
+                return journal_file_next_entry(f, f->current_offset, direction, ret, offset);
 
         /* If we have a match then we look for the next matching entry
          * with an offset at least one step larger */
-        return next_for_match(j, j->level0, f, direction == DIRECTION_DOWN ? cp+1 : cp-1, direction, ret, offset);
+        return next_for_match(j, j->level0, f,
+                              direction == DIRECTION_DOWN ? f->current_offset + 1
+                                                          : f->current_offset - 1,
+                              direction, ret, offset);
 }
 
 static int next_beyond_location(sd_journal *j, JournalFile *f, direction_t direction) {
@@ -724,14 +721,12 @@ static int next_beyond_location(sd_journal *j, JournalFile *f, direction_t direc
         assert(j);
         assert(f);
 
-        /* If we hit EOF before, recheck if any new entries arrived. */
-        n_entries = le64toh(f->header->n_entries);
-        if (f->location_type == LOCATION_TAIL && n_entries == f->last_n_entries)
-                return 0;
-        f->last_n_entries = n_entries;
-
         if (f->last_direction == direction && f->current_offset > 0) {
-                cp = f->current_offset;
+                /* If we hit EOF before, recheck if any new entries arrived. */
+                n_entries = le64toh(f->header->n_entries);
+                if (f->location_type == LOCATION_TAIL && n_entries == f->last_n_entries)
+                        return 0;
+                f->last_n_entries = n_entries;
 
                 /* LOCATION_SEEK here means we did the work in a previous
                  * iteration and the current location already points to a
@@ -1201,11 +1196,6 @@ static int add_any_file(sd_journal *j, const char *path) {
         if (ordered_hashmap_get(j->files, path))
                 return 0;
 
-        if (ordered_hashmap_size(j->files) >= JOURNAL_FILES_MAX) {
-                log_warning("Too many open journal files, not adding %s.", path);
-                return set_put_error(j, -ETOOMANYREFS);
-        }
-
         r = journal_file_open(path, O_RDONLY, 0, false, false, NULL, j->mmap, NULL, &f);
         if (r < 0)
                 return r;
@@ -2191,11 +2181,11 @@ _public_ int sd_journal_process(sd_journal *j) {
         j->last_process_usec = now(CLOCK_MONOTONIC);
 
         for (;;) {
-                uint8_t buffer[INOTIFY_EVENT_MAX] _alignas_(struct inotify_event);
+                union inotify_event_buffer buffer;
                 struct inotify_event *e;
                 ssize_t l;
 
-                l = read(j->inotify_fd, buffer, sizeof(buffer));
+                l = read(j->inotify_fd, &buffer, sizeof(buffer));
                 if (l < 0) {
                         if (errno == EAGAIN || errno == EINTR)
                                 return got_something ? determine_change(j) : SD_JOURNAL_NOP;