Commit Diff


commit - b12e0fe80f3f1d8051f7f6cb6708d3a65c163d05
commit + 19545591fb064b03b85f23b7a8bf64061fa82b68
blob - 2446e2dde7afc86c2e450ef5c9845b2bd569261f
blob + 7aded7f0ba3070a6bf7233a97f5272a4baefc58b
--- gotwebd/fcgi.c
+++ gotwebd/fcgi.c
@@ -66,9 +66,9 @@ fcgi_shutdown(void)
 {
 	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);
@@ -106,7 +106,7 @@ send_parsed_params(struct gotwebd_fcgi_params *params)
 {
 	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");
 }
@@ -116,7 +116,7 @@ abort_request(uint32_t request_id)
 {
 	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");
 }
@@ -439,13 +439,13 @@ dump_fcgi_end_request_body(const char *p, struct fcgi_
 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 *
@@ -530,8 +530,8 @@ recv_server_pipe(struct gotwebd *env, struct imsg *ims
 	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;
 	}
 
@@ -553,7 +553,7 @@ recv_server_pipe(struct gotwebd *env, struct imsg *ims
 	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 - 5f2b1c6836e35e7f9ed602b0e1425472f331e026
blob + d871db0ccd691ec62818bcca37d685f311e32482
--- gotwebd/gotweb.c
+++ gotwebd/gotweb.c
@@ -163,7 +163,7 @@ cleanup_request(struct request *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");
 }
@@ -1389,15 +1389,11 @@ gotweb_render_age(struct template *tp, time_t committe
 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;
@@ -1449,10 +1445,9 @@ gotweb_launch(struct gotwebd *env)
 {
 	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)
@@ -1471,8 +1466,7 @@ gotweb_launch(struct gotwebd *env)
 	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
@@ -1547,16 +1541,13 @@ recv_server_pipe(struct gotwebd *env, struct imsg *ims
 	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);
@@ -1566,7 +1557,7 @@ recv_server_pipe(struct gotwebd *env, struct imsg *ims
 	event_set(&iev->ev, fd, EV_READ, gotweb_dispatch_server, iev);
 	imsg_event_add(iev);
 
-	env->servers_pending--;
+	env->iev_sockets = iev;
 }
 
 static void
@@ -1656,13 +1647,6 @@ gotweb(struct gotwebd *env, int fd)
 	    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 - 361e94d9fc08626854f1c0e4d31af3be36bec935
blob + ecc7fd3254c6a09eb4b56485c161763b345e14a1
--- gotwebd/gotwebd.c
+++ gotwebd/gotwebd.c
@@ -120,16 +120,7 @@ int
 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
@@ -530,8 +521,8 @@ main(int argc, char **argv)
 
 	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);
@@ -581,11 +572,11 @@ main(int argc, char **argv)
 
 	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");
 
@@ -593,15 +584,13 @@ main(int argc, char **argv)
 	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],
@@ -663,40 +652,32 @@ main(int argc, char **argv)
 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");
-		}
 	}
 }
 
@@ -707,14 +688,13 @@ gotwebd_configure(struct gotwebd *env, uid_t uid, gid_
 	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");
@@ -733,8 +713,9 @@ gotwebd_configure(struct gotwebd *env, uid_t uid, gid_
 	/* 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);
 }
@@ -742,13 +723,9 @@ gotwebd_configure(struct gotwebd *env, uid_t uid, gid_
 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--;
@@ -766,14 +743,18 @@ gotwebd_shutdown(void)
 	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
@@ -384,12 +384,11 @@ struct gotwebd {
 	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;