Reintroduce lock file.

master
Raheman Vaiya 4 years ago
parent 4880c72c2d
commit 3b9154d37f
  1. 2
      Makefile
  2. 19
      src/keyd.c

@ -2,6 +2,7 @@
DESTDIR=
PREFIX=/usr
LOCK_FILE="/var/run/keyd.lock"
SOCKET="/var/run/keyd.socket"
LOG_FILE="/var/log/keyd.log"
CONFIG_DIR="/etc/keyd"
@ -14,6 +15,7 @@ CFLAGS+=-DVERSION=\"$(VERSION)\" \
-DCONFIG_DIR=\"$(CONFIG_DIR)\" \
-DLOG_FILE=\"$(LOG_FILE)\" \
-DSOCKET=\"$(SOCKET)\" \
-DLOCK_FILE=\"$(LOCK_FILE)\" \
-I/usr/local/include \
-L/usr/local/lib\

@ -811,6 +811,21 @@ static void daemonize()
dup2(fd, 2);
}
static void lock()
{
int fd;
if ((fd = open(LOCK_FILE, O_CREAT | O_RDWR, 0600)) == -1) {
perror("flock open");
exit(1);
}
if (flock(fd, LOCK_EX | LOCK_NB) == -1) {
fprintf(stderr, "ERROR: Another instance of keyd is already running.\n");
exit(-1);
}
}
static void chgid()
{
struct group *g = getgrnam("keyd");
@ -912,9 +927,7 @@ int main(int argc, char *argv[])
}
chgid();
if (!access(SOCKET, F_OK))
die("ERROR: Another instance of keyd appears to be running.\n"
"\tto force keyd to run, manually remove %s and try again.", SOCKET);
lock();
if (daemonize_flag)
daemonize();

Loading…
Cancel
Save