diff options
Diffstat (limited to 'src/pidfile.c')
-rw-r--r-- | src/pidfile.c | 96 |
1 files changed, 54 insertions, 42 deletions
diff --git a/src/pidfile.c b/src/pidfile.c index 16bad09..6c3083c 100644 --- a/src/pidfile.c +++ b/src/pidfile.c @@ -1,5 +1,5 @@ /* wydawca - automatic release submission daemon - Copyright (C) 2007, 2009-2013, 2017, 2019-2020 Sergey Poznyakoff + Copyright (C) 2007, 2009-2013, 2017, 2019-2022 Sergey Poznyakoff Wydawca is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the @@ -20,56 +20,68 @@ char *pidfile = LOCALSTATEDIR "/run/wydawca.pid"; int force_startup; void -remove_pidfile(void) +pidfile_remove(void) { - unlink(pidfile); + unlink(pidfile); } void -check_pidfile() +pidfile_check(void) { - FILE *fp = fopen(pidfile, "r+"); + FILE *fp = fopen(pidfile, "r+"); - if (fp) { - unsigned long pid = -1; - if (fscanf(fp, "%lu\n", &pid) != 1) { - wy_log(LOG_ERR, _("malformed pidfile %s"), pidfile); - if (!force_startup) - exit(EX_UNAVAILABLE); - } else { - if (kill(pid, 0)) { - if (errno != ESRCH) { - wy_log(LOG_ERR, - _("cannot verify if PID %lu " - "is running: %s"), - pid, strerror(errno)); - if (!force_startup) - exit(EX_UNAVAILABLE); - } - } else if (!force_startup) { - wy_log(LOG_ERR, - _("another wydawca instance may " - "be running (PID %lu)"), - pid); - exit(EX_UNAVAILABLE); - } - } - wy_log(LOG_NOTICE, _("replacing pidfile %s (PID %lu)"), - pidfile, pid); - fseek(fp, 0, SEEK_SET); - } else if (errno != ENOENT) { - wy_log(LOG_ERR, _("cannot open pidfile %s: %s"), pidfile, - strerror(errno)); + if (fp) { + unsigned long pid = -1; + if (fscanf(fp, "%lu\n", &pid) != 1) { + wy_log(LOG_ERR, _("malformed pidfile %s"), pidfile); + if (!force_startup) exit(EX_UNAVAILABLE); } else { - fp = fopen(pidfile, "w"); - if (!fp) { - wy_log(LOG_ERR, - _("cannot open pidfile %s for writing: %s"), - pidfile, strerror(errno)); + if (kill(pid, 0)) { + if (errno != ESRCH) { + wy_log(LOG_ERR, + _("cannot verify if PID %lu " + "is running: %s"), pid, strerror(errno)); + if (!force_startup) exit(EX_UNAVAILABLE); } + } else if (!force_startup) { + wy_log(LOG_ERR, + _("another wydawca instance may " + "be running (PID %lu)"), pid); + exit(EX_UNAVAILABLE); + } } - fprintf(fp, "%lu\n", (unsigned long)getpid()); - fclose(fp); + wy_log(LOG_NOTICE, _("replacing pidfile %s (PID %lu)"), + pidfile, pid); + fseek(fp, 0, SEEK_SET); + } else if (errno != ENOENT) { + wy_log(LOG_ERR, _("cannot open pidfile %s: %s"), pidfile, + strerror(errno)); + exit(EX_UNAVAILABLE); + } else { + fp = fopen(pidfile, "w"); + if (!fp) { + wy_log(LOG_ERR, + _("cannot open pidfile %s for writing: %s"), + pidfile, strerror(errno)); + exit(EX_UNAVAILABLE); + } + } + fprintf(fp, "%lu\n", (unsigned long) getpid()); + fclose(fp); +} + +void +pidfile_update(void) +{ + FILE *fp = fopen(pidfile, "w"); + if (!fp) { + wy_log(LOG_ERR, + _("cannot open pidfile %s for writing: %s"), + pidfile, strerror(errno)); + exit(EX_UNAVAILABLE); + } + fprintf(fp, "%lu\n", (unsigned long) getpid()); + fclose(fp); } |