diff options
author | June McEnroe <june@causal.agency> | 2020-08-17 16:06:40 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-08-17 16:06:40 -0400 |
commit | ea96ef48cbf4980b7dd3dd61f944091ead821f20 (patch) | |
tree | 2433e257989c06aa679e3a8983f0f921093d9bdd | |
parent | Truncate PID file after opening and locking (diff) | |
download | catsit-ea96ef48cbf4980b7dd3dd61f944091ead821f20.tar.gz catsit-ea96ef48cbf4980b7dd3dd61f944091ead821f20.zip |
Use a non-blocking lock on the PID file
Diffstat (limited to '')
-rw-r--r-- | daemon.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/daemon.c b/daemon.c index 1643200..a1be594 100644 --- a/daemon.c +++ b/daemon.c @@ -247,11 +247,13 @@ int main(int argc, char *argv[]) { int pidFile = -1; if (pidPath) { - pidFile = open( - pidPath, O_WRONLY | O_CREAT | O_EXLOCK | O_CLOEXEC, 0600 - ); + pidFile = open(pidPath, O_WRONLY | O_CREAT | O_CLOEXEC, 0600); if (pidFile < 0) err(EX_CANTCREAT, "%s", pidPath); + error = flock(pidFile, LOCK_EX | LOCK_NB); + if (error && errno != EWOULDBLOCK) err(EX_IOERR, "%s", pidPath); + if (error) errx(EX_CANTCREAT, "%s: file is locked", pidPath); + error = ftruncate(pidFile, 0); if (error) err(EX_IOERR, "%s", pidPath); } |