#define DEFAULT_DATA_THRESHOLD (64*1024)
+static void remove_file_real(sd_journal *j, JournalFile *f);
+
static bool journal_pid_changed(sd_journal *j) {
assert(j);
static int real_journal_next(sd_journal *j, direction_t direction) {
JournalFile *f, *new_file = NULL;
uint64_t new_offset = 0;
- Object *o;
- uint64_t p;
+ uint64_t p = 0;
Iterator i;
+ Object *o;
int r;
assert_return(j, -EINVAL);
r = next_beyond_location(j, f, direction, &o, &p);
if (r < 0) {
log_debug("Can't iterate through %s, ignoring: %s", f->path, strerror(-r));
+ remove_file_real(j, f);
continue;
} else if (r == 0)
continue;
}
static int remove_file(sd_journal *j, const char *prefix, const char *filename) {
- char *path;
+ _cleanup_free_ char *path;
JournalFile *f;
assert(j);
return -ENOMEM;
f = hashmap_get(j->files, path);
- free(path);
if (!f)
return 0;
+ remove_file_real(j, f);
+ return 0;
+}
+
+static void remove_file_real(sd_journal *j, JournalFile *f) {
+ assert(j);
+ assert(f);
+
hashmap_remove(j->files, f->path);
log_debug("File %s removed.", f->path);
journal_file_close(f);
j->current_invalidate_counter ++;
-
- return 0;
}
static int add_directory(sd_journal *j, const char *prefix, const char *dirname) {
l -= step;
}
}
-
- return determine_change(j);
}
_public_ int sd_journal_wait(sd_journal *j, uint64_t timeout_usec) {
Iterator i;
JournalFile *f;
bool first = true;
+ uint64_t fmin = 0, tmax = 0;
int r;
assert_return(j, -EINVAL);
continue;
if (first) {
- if (from)
- *from = fr;
- if (to)
- *to = t;
+ fmin = fr;
+ tmax = t;
first = false;
} else {
- if (from)
- *from = MIN(fr, *from);
- if (to)
- *to = MAX(t, *to);
+ fmin = MIN(fr, fmin);
+ tmax = MAX(t, tmax);
}
}
+ if (from)
+ *from = fmin;
+ if (to)
+ *to = tmax;
+
return first ? 0 : 1;
}