Commit Diff


commit - 58b9c98fa08b361fce2d2e1d671c606d036163cd
commit + 2f713fe5ea69a546ed14839ae0212754176d2524
blob - 12c0f6571438fe82584500c7de04dd7ddd0f7b8d
blob + 728262b4753e1798f72fede626ce7bac6727437f
--- gotwebd/fcgi.c
+++ gotwebd/fcgi.c
@@ -68,9 +68,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);
@@ -108,7 +108,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");
 }
@@ -118,7 +118,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");
 }
@@ -441,13 +441,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 *
@@ -532,8 +532,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;
 	}
 
@@ -555,7 +555,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 - 2f3f068bf4d63106df28f9a2b25dbebbafd7d380
blob + 76851f1abf7527257b6fb9ec2ba256983ade75e0
--- gotwebd/gotweb.c
+++ gotwebd/gotweb.c
@@ -161,7 +161,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");
 }
@@ -1387,15 +1387,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;
@@ -1447,10 +1443,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)
@@ -1469,8 +1464,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
@@ -1545,16 +1539,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);
@@ -1564,7 +1555,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
@@ -1654,13 +1645,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 - cf5e8697a8b66b68fcc532a8ef50a024ed39f5ea
blob + ab3d68e47d567bc3609e5683e585a5895b3ea6ac
--- 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
@@ -529,8 +520,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);
@@ -580,11 +571,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");
 
@@ -592,15 +583,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],
@@ -662,40 +651,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");
-		}
 	}
 }
 
@@ -706,14 +687,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");
@@ -732,8 +712,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);
 }
@@ -741,13 +722,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--;
@@ -765,14 +742,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;