X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=innduct.git;a=blobdiff_plain;f=defer.c;h=99555deafcd574b6debf651466f77a9e612bec72;hp=9af9d58bd0a3fc9d456f932f69f1910189b5532b;hb=HEAD;hpb=f4aee95c41a0d6231d115386b8fbb23f6b8e349a diff --git a/defer.c b/defer.c index 9af9d58..775d1c9 100644 --- a/defer.c +++ b/defer.c @@ -1,6 +1,29 @@ +/* + * innduct + * tailing reliable realtime streaming feeder for inn + * defer.c - handling of defer and backlog files + * + * Copyright Ian Jackson + * and contributors; see LICENCE.txt. + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +#include "innduct.h" + /*---------- defer and backlog files ----------*/ -static void open_defer(void) { +/* + * Backlog files are also processed by innduct. We find the oldest + * backlog file which is at least a certain amount old, and feed it + * back into our processing. When every article in it has been read + * and processed, we unlink it and look for another backlog file. + * + * If we don't have a backlog file that we're reading, we close the + * defer file that we're writing and make it into a backlog file at + * the first convenient opportunity. + */ + +void open_defer(void) { struct stat stab; if (defer) return; @@ -54,7 +77,7 @@ static void open_defer(void) { syscrash("could not seek to new end of defer file %s", path_defer); } -static void close_defer(void) { +void close_defer(void) { if (!defer) return; @@ -66,7 +89,7 @@ static void close_defer(void) { time_t now= xtime(); - char *backlog= xasprintf("%s_backlog_%lu.%lu", feedfile, + char *backlog= masprintf("%s_backlog_%lu.%lu", feedfile, (unsigned long)now, (unsigned long)stab.st_ino); if (link(path_defer, backlog)) @@ -89,7 +112,7 @@ void poll_backlog_file(void) { search_backlog_file(); } -static void search_backlog_file(void) { +void search_backlog_file(void) { /* returns non-0 iff there are any backlog files */ glob_t gl; @@ -189,4 +212,3 @@ static void search_backlog_file(void) { globfree(&gl); return; } -