mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-12-25 08:53:36 +00:00
Added pidfile locking.
This commit is contained in:
parent
1aab3c5739
commit
b9e0c6e742
1 changed files with 20 additions and 11 deletions
31
httpd.c
31
httpd.c
|
@ -778,6 +778,26 @@ void httpd(void)
|
||||||
xs *shm_name = NULL;
|
xs *shm_name = NULL;
|
||||||
sem_t anon_job_sem;
|
sem_t anon_job_sem;
|
||||||
xs *pidfile = xs_fmt("%s/server.pid", srv_basedir);
|
xs *pidfile = xs_fmt("%s/server.pid", srv_basedir);
|
||||||
|
int pidfd;
|
||||||
|
|
||||||
|
{
|
||||||
|
/* do some pidfile locking acrobatics */
|
||||||
|
if ((pidfd = open(pidfile, O_RDWR | O_CREAT, 0660)) == -1) {
|
||||||
|
srv_log(xs_fmt("Cannot create pidfile %s -- cannot continue", pidfile));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lockf(pidfd, F_TLOCK, 1) == -1) {
|
||||||
|
srv_log(xs_fmt("Cannot lock pidfile %s -- server already running?", pidfile));
|
||||||
|
close(pidfd);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ftruncate(pidfd, 0);
|
||||||
|
|
||||||
|
xs *s = xs_fmt("%d\n", (int)getpid());
|
||||||
|
write(pidfd, s, strlen(s));
|
||||||
|
}
|
||||||
|
|
||||||
address = xs_dict_get(srv_config, "address");
|
address = xs_dict_get(srv_config, "address");
|
||||||
|
|
||||||
|
@ -813,17 +833,6 @@ void httpd(void)
|
||||||
srv_log(xs_fmt("httpd%s start %s %s", p_state->use_fcgi ? " (FastCGI)" : "",
|
srv_log(xs_fmt("httpd%s start %s %s", p_state->use_fcgi ? " (FastCGI)" : "",
|
||||||
full_address, USER_AGENT));
|
full_address, USER_AGENT));
|
||||||
|
|
||||||
{
|
|
||||||
FILE *f;
|
|
||||||
|
|
||||||
if ((f = fopen(pidfile, "w")) != NULL) {
|
|
||||||
fprintf(f, "%d\n", getpid());
|
|
||||||
fclose(f);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
srv_log(xs_fmt("Cannot create %s: %s", pidfile, strerror(errno)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* show the number of usable file descriptors */
|
/* show the number of usable file descriptors */
|
||||||
struct rlimit r;
|
struct rlimit r;
|
||||||
getrlimit(RLIMIT_NOFILE, &r);
|
getrlimit(RLIMIT_NOFILE, &r);
|
||||||
|
|
Loading…
Reference in a new issue