chiark / gitweb /
changelog: Finalise 2.2
[innduct.git] / defer.c
diff --git a/defer.c b/defer.c
index 9af9d58bd0a3fc9d456f932f69f1910189b5532b..775d1c9afcf5da715397fea8075c7176d367f31e 100644 (file)
--- 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 <ijackson@chiark.greenend.org.uk>
+ *  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;
 }
-