mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-05 21:46:08 +00:00
commit
97cedbcc4e
31
lib/libfrr.c
31
lib/libfrr.c
@ -262,34 +262,6 @@ bool frr_zclient_addr(struct sockaddr_storage *sa, socklen_t *sa_len,
|
|||||||
|
|
||||||
static struct frr_daemon_info *di = NULL;
|
static struct frr_daemon_info *di = NULL;
|
||||||
|
|
||||||
static void frr_guard_daemon(void)
|
|
||||||
{
|
|
||||||
int fd;
|
|
||||||
struct flock lock;
|
|
||||||
const char *path = di->pid_file;
|
|
||||||
|
|
||||||
fd = open(path, O_RDWR);
|
|
||||||
if (fd != -1) {
|
|
||||||
memset(&lock, 0, sizeof(lock));
|
|
||||||
lock.l_type = F_WRLCK;
|
|
||||||
lock.l_whence = SEEK_SET;
|
|
||||||
if (fcntl(fd, F_GETLK, &lock) < 0) {
|
|
||||||
flog_err_sys(
|
|
||||||
EC_LIB_SYSTEM_CALL,
|
|
||||||
"Could not do F_GETLK pid_file %s (%s), exiting",
|
|
||||||
path, safe_strerror(errno));
|
|
||||||
exit(1);
|
|
||||||
} else if (lock.l_type == F_WRLCK) {
|
|
||||||
flog_err_sys(
|
|
||||||
EC_LIB_SYSTEM_CALL,
|
|
||||||
"Process %d has a write lock on file %s already! Error: (%s)",
|
|
||||||
lock.l_pid, path, safe_strerror(errno));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
close(fd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void frr_preinit(struct frr_daemon_info *daemon, int argc, char **argv)
|
void frr_preinit(struct frr_daemon_info *daemon, int argc, char **argv)
|
||||||
{
|
{
|
||||||
di = daemon;
|
di = daemon;
|
||||||
@ -619,9 +591,6 @@ struct thread_master *frr_init(void)
|
|||||||
|
|
||||||
zprivs_init(di->privs);
|
zprivs_init(di->privs);
|
||||||
|
|
||||||
/* Guard to prevent a second instance of this daemon */
|
|
||||||
frr_guard_daemon();
|
|
||||||
|
|
||||||
master = thread_master_create(NULL);
|
master = thread_master_create(NULL);
|
||||||
signal_init(master, di->n_signals, di->signals);
|
signal_init(master, di->n_signals, di->signals);
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ pid_t pid_output(const char *path)
|
|||||||
|
|
||||||
if (fcntl(fd, F_SETLK, &lock) < 0) {
|
if (fcntl(fd, F_SETLK, &lock) < 0) {
|
||||||
flog_err_sys(EC_LIB_SYSTEM_CALL,
|
flog_err_sys(EC_LIB_SYSTEM_CALL,
|
||||||
"Could not lock pid_file %s (%s), exiting",
|
"Could not lock pid_file %s (%s), exiting. Please ensure that the daemon is not already running",
|
||||||
path, safe_strerror(errno));
|
path, safe_strerror(errno));
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user