commit - 58b9c98fa08b361fce2d2e1d671c606d036163cd
commit + 2f713fe5ea69a546ed14839ae0212754176d2524
blob - 12c0f6571438fe82584500c7de04dd7ddd0f7b8d
blob + 728262b4753e1798f72fede626ce7bac6727437f
--- gotwebd/fcgi.c
+++ gotwebd/fcgi.c
{
imsgbuf_clear(&gotwebd_env->iev_parent->ibuf);
free(gotwebd_env->iev_parent);
- if (gotwebd_env->iev_server) {
- imsgbuf_clear(&gotwebd_env->iev_server->ibuf);
- free(gotwebd_env->iev_server);
+ if (gotwebd_env->iev_sockets) {
+ imsgbuf_clear(&gotwebd_env->iev_sockets->ibuf);
+ free(gotwebd_env->iev_sockets);
}
free(gotwebd_env);
{
struct gotwebd *env = gotwebd_env;
- if (imsg_compose_event(env->iev_server, GOTWEBD_IMSG_FCGI_PARAMS,
+ if (imsg_compose_event(env->iev_sockets, GOTWEBD_IMSG_FCGI_PARAMS,
GOTWEBD_PROC_SERVER, -1, -1, params, sizeof(*params)) == -1)
log_warn("imsg_compose_event");
}
{
struct gotwebd *env = gotwebd_env;
- if (imsg_compose_event(env->iev_server, GOTWEBD_IMSG_REQ_ABORT,
+ if (imsg_compose_event(env->iev_sockets, GOTWEBD_IMSG_REQ_ABORT,
GOTWEBD_PROC_SERVER, -1, -1, &request_id, sizeof(request_id)) == -1)
log_warn("imsg_compose_event");
}
static void
fcgi_launch(struct gotwebd *env)
{
- if (env->iev_server == NULL)
- fatalx("server process not connected");
+ if (env->iev_sockets == NULL)
+ fatalx("sockets process not connected");
#ifndef PROFILE
if (pledge("stdio", NULL) == -1)
fatal("pledge");
#endif
- event_add(&env->iev_server->ev, NULL);
+ event_add(&env->iev_sockets->ev, NULL);
}
static struct gotwebd_fcgi_record *
struct imsgev *iev;
int fd;
- if (env->iev_server != NULL) {
- log_warn("server pipe already received");
+ if (env->iev_sockets != NULL) {
+ log_warn("sockets pipe already received");
return;
}
event_set(&iev->ev, fd, EV_READ, fcgi_dispatch_server, iev);
imsg_event_add(iev);
- env->iev_server = iev;
+ env->iev_sockets = iev;
}
static void
blob - 2f3f068bf4d63106df28f9a2b25dbebbafd7d380
blob + 76851f1abf7527257b6fb9ec2ba256983ade75e0
--- gotwebd/gotweb.c
+++ gotwebd/gotweb.c
fcgi_cleanup_request(c);
- if (imsg_compose_event(gotwebd_env->iev_server, GOTWEBD_IMSG_REQ_ABORT,
+ if (imsg_compose_event(gotwebd_env->iev_sockets, GOTWEBD_IMSG_REQ_ABORT,
GOTWEBD_PROC_GOTWEB, -1, -1, &request_id, sizeof(request_id)) == -1)
log_warn("imsg_compose_event");
}
static void
gotweb_shutdown(void)
{
- struct gotwebd *env = gotwebd_env;
- int i;
-
imsgbuf_clear(&gotwebd_env->iev_parent->ibuf);
free(gotwebd_env->iev_parent);
- for (i = 0; i < env->server_cnt - env->servers_pending; i++)
- imsgbuf_clear(&gotwebd_env->iev_server[i].ibuf);
- free(gotwebd_env->iev_server);
+ imsgbuf_clear(&gotwebd_env->iev_sockets->ibuf);
+ free(gotwebd_env->iev_sockets);
while (!TAILQ_EMPTY(&gotwebd_env->servers)) {
struct server *srv;
{
struct server *srv;
const struct got_error *error;
- int i;
- if (env->servers_pending != 0)
- fatal("server process not connected");
+ if (env->iev_sockets == NULL)
+ fatal("sockets process not connected");
#ifndef PROFILE
if (pledge("stdio rpath recvfd sendfd proc exec unveil", NULL) == -1)
if (unveil(NULL, NULL) == -1)
fatal("unveil");
- for (i = 0; i < env->server_cnt; i++)
- event_add(&env->iev_server[i].ev, NULL);
+ event_add(&env->iev_sockets->ev, NULL);
}
static void
struct imsgev *iev;
int fd;
- if (env->servers_pending <= 0) {
- log_warn("server pipes already received");
- return;
- }
-
fd = imsg_get_fd(imsg);
if (fd == -1)
fatalx("invalid server pipe fd");
- iev = &env->iev_server[env->servers_pending - 1];
+ iev = calloc(1, sizeof(*iev));
+ if (iev == NULL)
+ fatal("calloc");
if (imsgbuf_init(&iev->ibuf, fd) == -1)
fatal("imsgbuf_init");
imsgbuf_allow_fdpass(&iev->ibuf);
event_set(&iev->ev, fd, EV_READ, gotweb_dispatch_server, iev);
imsg_event_add(iev);
- env->servers_pending--;
+ env->iev_sockets = iev;
}
static void
env->iev_parent);
event_add(&env->iev_parent->ev, NULL);
- if (env->server_cnt <= 0)
- fatalx("invalid server count: %d", env->server_cnt);
- env->iev_server = calloc(env->server_cnt, sizeof(*env->iev_server));
- if (env->iev_server == NULL)
- fatal("calloc");
- env->servers_pending = env->server_cnt;
-
signal(SIGPIPE, SIG_IGN);
signal_set(&sighup, SIGHUP, gotweb_sighdlr, env);
blob - cf5e8697a8b66b68fcc532a8ef50a024ed39f5ea
blob + ab3d68e47d567bc3609e5683e585a5895b3ea6ac
--- gotwebd/gotwebd.c
+++ gotwebd/gotwebd.c
main_compose_sockets(struct gotwebd *env, uint32_t type, int fd,
const void *data, uint16_t len)
{
- size_t i;
- int ret = 0;
-
- for (i = 0; i < env->server_cnt; ++i) {
- ret = send_imsg(&env->iev_server[i], type, fd, data, len);
- if (ret)
- break;
- }
-
- return ret;
+ return send_imsg(env->iev_sockets, type, fd, data, len);
}
int
switch (proc_type) {
case GOTWEBD_PROC_SERVER:
- setproctitle("server");
- log_procinit("server");
+ setproctitle("sockets");
+ log_procinit("sockets");
if (chroot(env->httpd_chroot) == -1)
fatal("chroot %s", env->httpd_chroot);
evb = event_init();
- env->iev_server = calloc(env->server_cnt, sizeof(*env->iev_server));
- if (env->iev_server == NULL)
+ env->iev_sockets = calloc(1, sizeof(*env->iev_sockets));
+ if (env->iev_sockets == NULL)
fatal("calloc");
- env->iev_fcgi = calloc(env->server_cnt, sizeof(*env->iev_fcgi));
+ env->iev_fcgi = calloc(1, sizeof(*env->iev_fcgi));
if (env->iev_fcgi == NULL)
fatal("calloc");
if (env->iev_gotweb == NULL)
fatal("calloc");
- for (i = 0; i < env->server_cnt; ++i) {
- spawn_process(env, argv0, &env->iev_server[i],
- GOTWEBD_PROC_SERVER, gotwebd_username,
- gotwebd_dispatch_server);
+ spawn_process(env, argv0, env->iev_sockets,
+ GOTWEBD_PROC_SERVER, gotwebd_username,
+ gotwebd_dispatch_server);
- spawn_process(env, argv0, &env->iev_fcgi[i],
- GOTWEBD_PROC_FCGI, gotwebd_username,
- gotwebd_dispatch_fcgi);
- }
+ spawn_process(env, argv0, env->iev_fcgi,
+ GOTWEBD_PROC_FCGI, gotwebd_username,
+ gotwebd_dispatch_fcgi);
for (i = 0; i < env->prefork; ++i) {
spawn_process(env, argv0, &env->iev_gotweb[i],
static void
connect_children(struct gotwebd *env)
{
- struct imsgev *iev_server, *iev_fcgi, *iev_gotweb;
+ struct imsgev *iev_gotweb;
int pipe[2];
- int i, j;
+ int i;
- for (i = 0; i < env->server_cnt; i++) {
- iev_server = &env->iev_server[i];
- iev_fcgi = &env->iev_fcgi[i];
+ if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pipe) == -1)
+ fatal("socketpair");
+ if (main_compose_sockets(env, GOTWEBD_IMSG_CTL_PIPE, pipe[0], NULL, 0))
+ fatal("main_compose_sockets");
+
+ if (send_imsg(env->iev_fcgi, GOTWEBD_IMSG_CTL_PIPE, pipe[1], NULL, 0))
+ fatal("send_imsg");
+
+ for (i = 0; i < env->prefork; i++) {
+ iev_gotweb = &env->iev_gotweb[i];
+
if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pipe) == -1)
fatal("socketpair");
- if (send_imsg(iev_server, GOTWEBD_IMSG_CTL_PIPE, pipe[0],
- NULL, 0))
+ if (main_compose_sockets(env, GOTWEBD_IMSG_CTL_PIPE,
+ pipe[0], NULL, 0))
fatal("send_imsg");
- if (send_imsg(iev_fcgi, GOTWEBD_IMSG_CTL_PIPE, pipe[1],
- NULL, 0))
+ if (send_imsg(iev_gotweb, GOTWEBD_IMSG_CTL_PIPE,
+ pipe[1], NULL, 0))
fatal("send_imsg");
-
- for (j = 0; j < env->prefork; j++) {
- iev_gotweb = &env->iev_gotweb[j];
-
- if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC,
- pipe) == -1)
- fatal("socketpair");
-
- if (send_imsg(iev_server, GOTWEBD_IMSG_CTL_PIPE,
- pipe[0], NULL, 0))
- fatal("send_imsg");
-
- if (send_imsg(iev_gotweb, GOTWEBD_IMSG_CTL_PIPE,
- pipe[1], NULL, 0))
- fatal("send_imsg");
- }
}
}
struct socket *sock;
/* gotweb need to reload its config. */
- env->servers_pending = env->server_cnt;
env->gotweb_pending = env->prefork;
/* send our gotweb servers */
TAILQ_FOREACH(srv, &env->servers, entry) {
if (main_compose_sockets(env, GOTWEBD_IMSG_CFG_SRV,
-1, srv, sizeof(*srv)) == -1)
- fatal("main_compose_sockets GOTWEBD_IMSG_CFG_SRV");
+ fatal("send_imsg GOTWEBD_IMSG_CFG_SRV");
if (main_compose_gotweb(env, GOTWEBD_IMSG_CFG_SRV,
-1, srv, sizeof(*srv)) == -1)
fatal("main_compose_gotweb GOTWEBD_IMSG_CFG_SRV");
/* Connect servers and gotwebs. */
connect_children(env);
- if (main_compose_sockets(env, GOTWEBD_IMSG_CFG_DONE, -1, NULL, 0) == -1)
- fatal("main_compose_sockets GOTWEBD_IMSG_CFG_DONE");
+ if (main_compose_sockets(env, GOTWEBD_IMSG_CFG_DONE, -1,
+ NULL, 0) == -1)
+ fatal("send_imsg GOTWEBD_IMSG_CFG_DONE");
return (0);
}
void
gotwebd_configure_done(struct gotwebd *env)
{
- if (env->servers_pending > 0) {
- env->servers_pending--;
- if (env->servers_pending == 0 &&
- main_compose_sockets(env, GOTWEBD_IMSG_CTL_START,
- -1, NULL, 0) == -1)
- fatal("main_compose_sockets GOTWEBD_IMSG_CTL_START");
- }
+ if (main_compose_sockets(env, GOTWEBD_IMSG_CTL_START,
+ -1, NULL, 0) == -1)
+ fatal("send_imsg GOTWEBD_IMSG_CTL_START");
if (env->gotweb_pending > 0) {
env->gotweb_pending--;
pid_t pid;
int i, status;
- for (i = 0; i < env->server_cnt; ++i) {
- event_del(&env->iev_server[i].ev);
- imsgbuf_clear(&env->iev_server[i].ibuf);
- close(env->iev_server[i].ibuf.fd);
- env->iev_server[i].ibuf.fd = -1;
- }
- free(env->iev_server);
+ event_del(&env->iev_sockets->ev);
+ imsgbuf_clear(&env->iev_sockets->ibuf);
+ close(env->iev_sockets->ibuf.fd);
+ env->iev_sockets->ibuf.fd = -1;
+ free(env->iev_sockets);
+ event_del(&env->iev_fcgi->ev);
+ imsgbuf_clear(&env->iev_fcgi->ibuf);
+ close(env->iev_fcgi->ibuf.fd);
+ env->iev_fcgi->ibuf.fd = -1;
+ free(env->iev_fcgi);
+
for (i = 0; i < env->prefork; ++i) {
event_del(&env->iev_gotweb[i].ev);
imsgbuf_clear(&env->iev_gotweb[i].ibuf);
blob - 18fe22bae49e8cf885500524c79e5780dd102d28
blob + 0719d555453958214b9038725b19d44c068a5c05
--- gotwebd/gotwebd.h
+++ gotwebd/gotwebd.h
int gotwebd_verbose;
struct imsgev *iev_parent;
- struct imsgev *iev_server;
+ struct imsgev *iev_sockets;
struct imsgev *iev_fcgi;
struct imsgev *iev_gotweb;
uint16_t prefork;
- int servers_pending;
int gotweb_pending;
int gotweb_cur;