X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=statemc.c;h=b068722a15e339f81e7639341110c2ab977f433e;hb=refs%2Fheads%2Fmaster;hp=3ce00f483a6d35e6e825ec538b832a1571778120;hpb=65ad91cb4072e297a97b06a791acd7e071e0dff6;p=innduct.git diff --git a/statemc.c b/statemc.c index 3ce00f4..26b5c22 100644 --- a/statemc.c +++ b/statemc.c @@ -3,25 +3,9 @@ * tailing reliable realtime streaming feeder for inn * statemc.c - state machine core (see README.states). * - * Copyright (C) 2010 Ian Jackson - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * (I believe that when you compile and link this as part of the inn2 - * build, with the Makefile runes I have provided, all the libraries - * and files which end up included in innduct are licence-compatible - * with GPLv3. If not then please let me know. -Ian Jackson.) + * Copyright Ian Jackson + * and contributors; see LICENCE.txt. + * SPDX-License-Identifier: GPL-3.0-or-later */ #include "innduct.h" @@ -105,7 +89,7 @@ void statemc_init(void) { dbg("startup: ductdefer ENOENT"); } else { dbg("startup: ductdefer nlink=%ld", (long)stabdefer.st_nlink); - switch (stabdefer.st_nlink==1) { + switch (stabdefer.st_nlink) { case 1: open_defer(); /* so that we will later close it and rename it */ break; @@ -114,8 +98,8 @@ void statemc_init(void) { " (presumably hardlink to backlog file)"); break; default: - crash("defer file %s has unexpected link count %d", - path_defer, stabdefer.st_nlink); + crash("defer file %s has unexpected link count %ld", + path_defer, (long)stabdefer.st_nlink); } } @@ -232,14 +216,15 @@ static void notice_processed_counts(Counts *counts, int completed, #define CNT(art,rc) (counts->results[art_##art][RC_##rc]) char *inprog= ipf_xtra && !completed - ? xasprintf(" inprogress=%ld", ipf_xtra->inprogress) - : xasprintf("%s",""); /* GCC produces a stupid warning for printf("") ! */ + ? masprintf(" inprogress=%ld", ipf_xtra->inprogress) + : masprintf("%s",""); /* GCC produces a stupid warning for printf("") ! */ char *autodefer= ipf_xtra && ipf_xtra->autodefer >= 0 - ? xasprintf(" autodeferred=%ld", ipf_xtra->autodefer) - : xasprintf("%s",""); + ? masprintf(" autodeferred=%ld", ipf_xtra->autodefer) + : masprintf("%s",""); - notice("%s %s read=%d (+bl=%d,+err=%d)%s%s" - " missing=%d offered=%d (ch=%d,nc=%d) accepted=%d (ch=%d,nc=%d)" + notice("%s %s read=%d (+bl=%d,+err=%d)%s%s missing=%d" + " offered=%d (ch=%d,nc=%d)" + " accepted=%d (ch=%d,nc=%d)" RESULT_COUNTS(RCI_NOTHING, RCI_TRIPLE_FMT) , completed?"completed":"processed", what, @@ -248,8 +233,8 @@ static void notice_processed_counts(Counts *counts, int completed, inprog, autodefer, counts->events[nooffer_missing], CNT(Unchecked,sent) + CNT(Unsolicited,sent) , CNT(Unchecked,sent), CNT(Unsolicited,sent), - CNT(Wanted,accepted) + CNT(Unsolicited,accepted) - , CNT(Wanted,accepted), CNT(Unsolicited,accepted) + CNT(Wanted,accepted) + CNT(Wanted,accepted) + , CNT(Wanted,accepted), CNT(Wanted,accepted) RESULT_COUNTS(RCI_NOTHING, RCI_TRIPLE_VALS) ); @@ -521,7 +506,7 @@ void showstats(void) { static int signal_self_pipe[2]; static void *sigarrived_event(oop_source *lp, int fd, oop_event e, void *u) { - assert(fd=signal_self_pipe[0]); + assert(fd==signal_self_pipe[0]); char buf[PIPE_BUF]; int r= read(signal_self_pipe[0], buf, sizeof(buf)); if (r<0 && !isewouldblock(errno)) @@ -536,6 +521,7 @@ static void *sigarrived_event(oop_source *lp, int fd, oop_event e, void *u) { } static void sigarrived_handler(int signum) { + int esave = errno; static char x; switch (signum) { case SIGTERM: @@ -545,7 +531,9 @@ static void sigarrived_handler(int signum) { default: abort(); } - write(signal_self_pipe[1],&x,1); + int r = write(signal_self_pipe[1],&x,1); + if (!(r==1 || isewouldblock(errno))) abort(); + errno = esave; } void init_signals(void) {