aboutsummaryrefslogtreecommitdiff
path: root/src/pidfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pidfile.c')
-rw-r--r--src/pidfile.c96
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);
}

Return to:

Send suggestions and report system problems to the System administrator.