"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Omar Polo <op@omarpolo.com>
Subject:
move gotd_child_proc struct in gotd.c
To:
gameoftrees@openbsd.org
Date:
Thu, 22 Jun 2023 12:03:27 +0200

Download raw body.

Thread
I'm splitting the diff I sent yesterday into more manegeable bits.

This is not strictly needed, but sice the struct gotd_child_proc is
not used outside of gotd.c, let's move it there and allocate
dynamically listen_proc in gotd.

While here, I'm also dropping the `nhelpers' field which seems
currently unused.

diff /home/op/w/got
commit - a60eb2cc0fad47d21b6c6329245e25f548245c00
path + /home/op/w/got
blob - f15597dbd0e7299cbf018874f9d81d6c8dcaf403
file + gotd/gotd.c
--- gotd/gotd.c
+++ gotd/gotd.c
@@ -73,6 +73,15 @@ struct gotd_client {
 	GOTD_CLIENT_STATE_ACCESS_GRANTED,
 };
 
+struct gotd_child_proc {
+	pid_t				 pid;
+	enum gotd_procid		 type;
+	char				 repo_name[NAME_MAX];
+	char				 repo_path[PATH_MAX];
+	int				 pipe[2];
+	struct gotd_imsgev		 iev;
+};
+
 struct gotd_client {
 	STAILQ_ENTRY(gotd_client)	 entry;
 	enum gotd_client_state		 state;
@@ -331,7 +340,7 @@ disconnect(struct gotd_client *client)
 {
 	struct gotd_imsg_disconnect idisconnect;
 	struct gotd_child_proc *proc = client->repo;
-	struct gotd_child_proc *listen_proc = &gotd.listen_proc;
+	struct gotd_child_proc *listen_proc = gotd.listen_proc;
 	uint64_t slot;
 
 	log_debug("uid %d: disconnecting", client->euid);
@@ -703,7 +712,7 @@ done:
 	    client->euid, client->fd);
 done:
 	if (err) {
-		struct gotd_child_proc *listen_proc = &gotd.listen_proc;
+		struct gotd_child_proc *listen_proc = gotd.listen_proc;
 		struct gotd_imsg_disconnect idisconnect;
 
 		idisconnect.client_id = client->id;
@@ -753,7 +762,7 @@ gotd_shutdown(void)
 			disconnect(c);
 	}
 
-	proc = &gotd.listen_proc;
+	proc = gotd.listen_proc;
 	msgbuf_clear(&proc->iev.ibuf.w);
 	close(proc->iev.ibuf.fd);
 	kill_proc(proc, 0);
@@ -960,7 +969,7 @@ gotd_dispatch_listener(int fd, short event, void *arg)
 {
 	struct gotd_imsgev *iev = arg;
 	struct imsgbuf *ibuf = &iev->ibuf;
-	struct gotd_child_proc *proc = &gotd.listen_proc;
+	struct gotd_child_proc *proc = gotd.listen_proc;
 	ssize_t n;
 	int shut = 0;
 	struct imsg imsg;
@@ -1488,8 +1497,12 @@ start_listener(char *argv0, const char *confpath, int 
 static void
 start_listener(char *argv0, const char *confpath, int daemonize, int verbosity)
 {
-	struct gotd_child_proc *proc = &gotd.listen_proc;
+	struct gotd_child_proc *proc;
 
+	proc = calloc(1, sizeof(*proc));
+	if (proc == NULL)
+		fatal("calloc");
+
 	proc->type = PROC_LISTEN;
 
 	if (socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK,
@@ -1502,6 +1515,8 @@ start_listener(char *argv0, const char *confpath, int 
 	proc->iev.handler = gotd_dispatch_listener;
 	proc->iev.events = EV_READ;
 	proc->iev.handler_arg = NULL;
+
+	gotd.listen_proc = proc;
 }
 
 static const struct got_error *
@@ -1948,7 +1963,7 @@ main(int argc, char **argv)
 	signal_add(&evsighup, NULL);
 	signal_add(&evsigusr1, NULL);
 
-	gotd_imsg_event_add(&gotd.listen_proc.iev);
+	gotd_imsg_event_add(&gotd.listen_proc->iev);
 
 	event_dispatch();
 
blob - 35d6e95f4881eb3c4ce60156fce684fa03070cb4
file + gotd/gotd.h
--- gotd/gotd.h
+++ gotd/gotd.h
@@ -51,16 +51,6 @@ struct gotd_child_proc {
 	short		 events;
 };
 
-struct gotd_child_proc {
-	pid_t pid;
-	enum gotd_procid type;
-	char repo_name[NAME_MAX];
-	char repo_path[PATH_MAX];
-	int pipe[2];
-	struct gotd_imsgev iev;
-	size_t nhelpers;
-};
-
 enum gotd_access {
 	GOTD_ACCESS_PERMITTED = 1,
 	GOTD_ACCESS_DENIED
@@ -120,13 +110,15 @@ struct gotd {
 	int max_connections;
 };
 
+struct gotd_child_proc;
+
 struct gotd {
 	pid_t pid;
 	char unix_socket_path[PATH_MAX];
 	char user_name[32];
 	struct gotd_repolist repos;
 	int nrepos;
-	struct gotd_child_proc listen_proc;
+	struct gotd_child_proc *listen_proc;
 	struct timeval request_timeout;
 	struct timeval auth_timeout;
 	struct gotd_uid_connection_limit *connection_limits;