Use a non-blocking lock on the PID file

This commit is contained in:
C. McEnroe 2020-08-17 16:06:40 -04:00
parent 620735523f
commit ea96ef48cb

View File

@ -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);
}