Index | Thread | Search

From:
Theo Buehler <tb@theobuehler.org>
Subject:
libutil: fix amused, gelatod, openmdns, pfresolved, telescope, thingsd
To:
ports@openbsd.org, claudio@openbsd.org
Cc:
kn@openbsd.org, gonzalo@openbsd.org, bluhm@openbsd.org, op@openbsd.org, tracey@openbsd.org
Date:
Mon, 7 Sep 2026 06:37:16 +0200

Download raw body.

Thread
This diff addresses the remaining fallout from the libutil bump.

imsgbuf_get() does the same thing as the now removed imsg_get() except
that it doesn't have a special return value != -1, 0 and its return type
is an int, not a ssize_t.

None of these ports looks at this special value, so all the calls can
just be replaced.

diff --git a/audio/amused/patches/patch-amused_c b/audio/amused/patches/patch-amused_c
new file mode 100644
index 00000000000..f731758a4d7
--- /dev/null
+++ b/audio/amused/patches/patch-amused_c
@@ -0,0 +1,14 @@
+Index: amused.c
+--- amused.c.orig
++++ amused.c
+@@ -123,8 +123,8 @@ main_dispatch_player(int sig, int event, void *d)
+ 	}
+ 
+ 	for (;;) {
+-		if ((n = imsg_get(imsgbuf, &imsg)) == -1)
+-			fatal("imsg_get");
++		if ((n = imsgbuf_get(imsgbuf, &imsg)) == -1)
++			fatal("imsgbuf_get");
+ 		if (n == 0)	/* No more messages. */
+ 			break;
+ 
diff --git a/audio/amused/patches/patch-control_c b/audio/amused/patches/patch-control_c
new file mode 100644
index 00000000000..988c138cb97
--- /dev/null
+++ b/audio/amused/patches/patch-control_c
@@ -0,0 +1,23 @@
+Index: control.c
+--- control.c.orig
++++ control.c
+@@ -279,8 +279,8 @@ control_dispatch_imsg(int fd, int event, void *bula)
+ 	struct imsg		 imsg;
+ 	struct player_mode	 mode;
+ 	struct player_seek	 seek;
+-	ssize_t		 	 n, off;
+-	int			 type, all;
++	ssize_t		 	 off;
++	int			 n, type, all;
+ 
+ 	if ((c = control_connbyfd(fd)) == NULL) {
+ 		log_warnx("%s: fd %d: not found", __func__, fd);
+@@ -304,7 +304,7 @@ control_dispatch_imsg(int fd, int event, void *bula)
+ 	}
+ 
+ 	for (;;) {
+-		if ((n = imsg_get(imsgbuf, &imsg)) == -1) {
++		if ((n = imsgbuf_get(imsgbuf, &imsg)) == -1) {
+ 			control_close(fd);
+ 			return;
+ 		}
diff --git a/audio/amused/patches/patch-ctl_c b/audio/amused/patches/patch-ctl_c
new file mode 100644
index 00000000000..3e4c275f7cc
--- /dev/null
+++ b/audio/amused/patches/patch-ctl_c
@@ -0,0 +1,24 @@
+Index: ctl.c
+--- ctl.c.orig
++++ ctl.c
+@@ -417,8 +417,7 @@ ctlaction(struct parse_result *res)
+ 	struct imsg imsg;
+ 	struct player_status ps;
+ 	struct player_event ev;
+-	ssize_t n;
+-	int i, type, ret = 0, done = 1;
++	int i, n, type, ret = 0, done = 1;
+ 
+ 	if (pledge("stdio", NULL) == -1)
+ 		fatal("pledge");
+@@ -544,8 +543,8 @@ ctlaction(struct parse_result *res)
+ 			fatalx("pipe closed");
+ 
+ 		while (!done) {
+-			if ((n = imsg_get(imsgbuf, &imsg)) == -1)
+-				fatalx("imsg_get error");
++			if ((n = imsgbuf_get(imsgbuf, &imsg)) == -1)
++				fatalx("imsgbuf_get error");
+ 			if (n == 0)
+ 				break;
+ 
diff --git a/audio/amused/patches/patch-mpris2_mpris2_c b/audio/amused/patches/patch-mpris2_mpris2_c
new file mode 100644
index 00000000000..cf6a8c6535a
--- /dev/null
+++ b/audio/amused/patches/patch-mpris2_mpris2_c
@@ -0,0 +1,23 @@
+Index: mpris2/mpris2.c
+--- mpris2/mpris2.c.orig
++++ mpris2/mpris2.c
+@@ -456,7 +456,7 @@ imsg_dispatch(GIOChannel *chan, GIOCondition cond, gpo
+ 	struct imsg		 imsg;
+ 	struct ibuf		 ibuf;
+ 	struct player_event	 event;
+-	ssize_t			 n;
++	int			 n;
+ 	size_t			 datalen;
+ 	const char		*msg;
+ 	char			 sha1buf[SHA1_DIGEST_STRING_LENGTH];
+@@ -467,8 +467,8 @@ imsg_dispatch(GIOChannel *chan, GIOCondition cond, gpo
+ 		fatalx("pipe closed");
+ 
+ 	for (;;) {
+-		if ((n = imsg_get(imsgbuf, &imsg)) == -1)
+-			fatal("imsg_get");
++		if ((n = imsgbuf_get(imsgbuf, &imsg)) == -1)
++			fatal("imsgbuf_get");
+ 		if (n == 0)
+ 			break;
+ 
diff --git a/audio/amused/patches/patch-player_c b/audio/amused/patches/patch-player_c
new file mode 100644
index 00000000000..0cca2f46a5c
--- /dev/null
+++ b/audio/amused/patches/patch-player_c
@@ -0,0 +1,22 @@
+Index: player.c
+--- player.c.orig
++++ player.c
+@@ -114,15 +114,14 @@ player_dispatch(int64_t *s, int wait)
+ 	struct player_seek seek;
+ 	struct pollfd	pfd;
+ 	struct imsg	imsg;
+-	ssize_t		n;
+-	int		ret;
++	int		n, ret;
+ 
+ 	if (halted != 0)
+ 		return IMSG_STOP;
+ 
+ again:
+-	if ((n = imsg_get(imsgbuf, &imsg)) == -1)
+-		fatal("imsg_get");
++	if ((n = imsgbuf_get(imsgbuf, &imsg)) == -1)
++		fatal("imsgbuf_get");
+ 	if (n == 0) {
+ 		if (!wait)
+ 			return -1;
diff --git a/audio/amused/patches/patch-web_web_c b/audio/amused/patches/patch-web_web_c
new file mode 100644
index 00000000000..aecca1d8dea
--- /dev/null
+++ b/audio/amused/patches/patch-web_web_c
@@ -0,0 +1,25 @@
+Index: web/web.c
+--- web/web.c.orig
++++ web/web.c
+@@ -470,9 +470,8 @@ imsg_dispatch(int fd, int ev, void *d)
+ 	struct player_status	 ps;
+ 	struct player_event	 event;
+ 	const char		*msg;
+-	ssize_t			 n;
+ 	size_t			 datalen;
+-	int			 r;
++	int			 n, r;
+ 
+ 	if (ev & EV_READ) {
+ 		if ((n = imsgbuf_read(&imsgbuf)) == -1)
+@@ -486,8 +485,8 @@ imsg_dispatch(int fd, int ev, void *d)
+ 	}
+ 
+ 	for (;;) {
+-		if ((n = imsg_get(&imsgbuf, &imsg)) == -1)
+-			fatal("imsg_get");
++		if ((n = imsgbuf_get(&imsgbuf, &imsg)) == -1)
++			fatal("imsgbuf_get");
+ 		if (n == 0)
+ 			break;
+ 
diff --git a/net/gelatod/patches/patch-frontend_c b/net/gelatod/patches/patch-frontend_c
new file mode 100644
index 00000000000..9cf6e33b7ce
--- /dev/null
+++ b/net/gelatod/patches/patch-frontend_c
@@ -0,0 +1,24 @@
+Index: frontend.c
+--- frontend.c.orig
++++ frontend.c
+@@ -364,8 +364,7 @@ frontend_dispatch_main(int fd, short event, void *bula
+ 	struct imsg		 imsg;
+ 	struct imsgev		*iev = bula;
+ 	struct imsgbuf		*ibuf = &iev->ibuf;
+-	ssize_t			 n;
+-	int			 shut = 0;
++	int			 n, shut = 0;
+ 
+ 	if (event & EV_READ) {
+ 		if ((n = imsgbuf_read(ibuf)) == -1)
+@@ -383,8 +382,8 @@ frontend_dispatch_main(int fd, short event, void *bula
+ 	}
+ 
+ 	for (;;) {
+-		if ((n = imsg_get(ibuf, &imsg)) == -1)
+-			fatal("%s: imsg_get error", __func__);
++		if ((n = imsgbuf_get(ibuf, &imsg)) == -1)
++			fatal("%s: imsgbuf_get error", __func__);
+ 		if (n == 0)	/* No more messages. */
+ 			break;
+ 
diff --git a/net/gelatod/patches/patch-gelatod_c b/net/gelatod/patches/patch-gelatod_c
new file mode 100644
index 00000000000..d1281d0b667
--- /dev/null
+++ b/net/gelatod/patches/patch-gelatod_c
@@ -0,0 +1,24 @@
+Index: gelatod.c
+--- gelatod.c.orig
++++ gelatod.c
+@@ -308,8 +308,7 @@ main_dispatch_frontend(int fd, short event, void *bula
+ 	struct imsgbuf		*ibuf;
+ 	struct imsg		 imsg;
+ 	struct clat_imsg	 clat_imsg;
+-	ssize_t			 n;
+-	int			 shut = 0;
++	int			 n, shut = 0;
+ 
+ 	ibuf = &iev->ibuf;
+ 
+@@ -329,8 +328,8 @@ main_dispatch_frontend(int fd, short event, void *bula
+ 	}
+ 
+ 	for (;;) {
+-		if ((n = imsg_get(ibuf, &imsg)) == -1)
+-			fatal("imsg_get");
++		if ((n = imsgbuf_get(ibuf, &imsg)) == -1)
++			fatal("imsgbuf_get");
+ 		if (n == 0)	/* No more messages. */
+ 			break;
+ 
diff --git a/net/openmdns/patches/patch-libmdns_mdnsl_c b/net/openmdns/patches/patch-libmdns_mdnsl_c
index 78f9ca156b8..1476464a468 100644
--- a/net/openmdns/patches/patch-libmdns_mdnsl_c
+++ b/net/openmdns/patches/patch-libmdns_mdnsl_c
@@ -22,7 +22,16 @@ Index: libmdns/mdnsl.c
  }
  
  void
-@@ -329,7 +330,7 @@ mdns_read(struct mdns *m)
+@@ -321,21 +322,20 @@ mdns_service_init(struct mdns_service *ms, const char 
+ ssize_t
+ mdns_read(struct mdns *m)
+ {
+-	int			ev;
+-	size_t			r;
++	int			ev, r;
+ 	ssize_t			n;
+ 	struct imsg		imsg;
+ 	struct rr		rr;
  	struct mdns_service	ms;
  	char			groupname[MAXHOSTNAMELEN];
  
@@ -31,7 +40,14 @@ Index: libmdns/mdnsl.c
  
  	if (n == -1 || n == 0)
  		return (n);
-@@ -514,7 +515,7 @@ ibuf_send_imsg(struct imsgbuf *ibuf, u_int32_t type,
+ 
+ 	/* TODO call imsgctl_to_event() */
+-	while ((r = imsg_get(&m->ibuf, &imsg)) > 0) {
++	while ((r = imsgbuf_get(&m->ibuf, &imsg)) > 0) {
+ 		switch (imsg.hdr.type) {
+ 		case IMSG_CTL_LOOKUP: /* FALLTHROUGH */
+ 		case IMSG_CTL_LOOKUP_FAILURE:
+@@ -514,7 +514,7 @@ ibuf_send_imsg(struct imsgbuf *ibuf, u_int32_t type,
  
  	imsg_close(ibuf, wbuf);
  
diff --git a/net/openmdns/patches/patch-mdnsd_control_c b/net/openmdns/patches/patch-mdnsd_control_c
index 2231d58b848..aea465c3d6d 100644
--- a/net/openmdns/patches/patch-mdnsd_control_c
+++ b/net/openmdns/patches/patch-mdnsd_control_c
@@ -37,7 +37,16 @@ Index: mdnsd/control.c
  	TAILQ_REMOVE(&ctl_conns, c, entry);
  
  	event_del(&c->iev.ev);
-@@ -644,13 +651,13 @@ control_dispatch_imsg(int fd, short event, void *bula)
+@@ -636,7 +643,7 @@ control_dispatch_imsg(int fd, short event, void *bula)
+ {
+ 	struct ctl_conn	*c;
+ 	struct imsg	 imsg;
+-	ssize_t		 n;
++	int		 n;
+ 
+ 	if ((c = control_connbyfd(fd)) == NULL) {
+ 		log_warn("control_dispatch_imsg: fd %d: not found", fd);
+@@ -644,20 +651,20 @@ control_dispatch_imsg(int fd, short event, void *bula)
  	}
  
  	if (event & EV_READ) {
@@ -53,3 +62,11 @@ Index: mdnsd/control.c
  			control_close(fd);
  			return;
  		}
+ 	}
+ 
+ 	for (;;) {
+-		if ((n = imsg_get(&c->iev.ibuf, &imsg)) == -1) {
++		if ((n = imsgbuf_get(&c->iev.ibuf, &imsg)) == -1) {
+ 			control_close(fd);
+ 			return;
+ 		}
diff --git a/net/pfresolved/patches/patch-control_c b/net/pfresolved/patches/patch-control_c
index 0f2fb8d24e5..167a1b20c80 100644
--- a/net/pfresolved/patches/patch-control_c
+++ b/net/pfresolved/patches/patch-control_c
@@ -23,7 +23,7 @@ Index: control.c
  	TAILQ_REMOVE(&ctl_conns, c, entry);
  
  	event_del(&c->iev.ev);
-@@ -247,14 +251,13 @@ control_dispatch_imsg(int fd, short event, void *arg)
+@@ -247,21 +251,20 @@ control_dispatch_imsg(int fd, short event, void *arg)
  	}
  
  	if (event & EV_READ) {
@@ -40,3 +40,11 @@ Index: control.c
  			control_close(fd, cs);
  			return;
  		}
+ 	}
+ 
+ 	for (;;) {
+-		if ((n = imsg_get(&c->iev.ibuf, &imsg)) == -1) {
++		if ((n = imsgbuf_get(&c->iev.ibuf, &imsg)) == -1) {
+ 			control_close(fd, cs);
+ 			return;
+ 		}
diff --git a/net/pfresolved/patches/patch-pfresolvectl_pfresolvectl_c b/net/pfresolved/patches/patch-pfresolvectl_pfresolvectl_c
index fedc9038ea2..4202c169acc 100644
--- a/net/pfresolved/patches/patch-pfresolvectl_pfresolvectl_c
+++ b/net/pfresolved/patches/patch-pfresolvectl_pfresolvectl_c
@@ -11,7 +11,7 @@ Index: pfresolvectl/pfresolvectl.c
  
  	switch (res->action) {
  	case NONE:
-@@ -113,14 +114,14 @@ main(int argc, char **argv)
+@@ -113,20 +114,20 @@ main(int argc, char **argv)
  		break;
  	}
  
@@ -31,3 +31,11 @@ Index: pfresolvectl/pfresolvectl.c
  		if (n == 0)
  			errx(1, "%s: pipe closed", __func__);
  
+ 		while (!done) {
+-			if ((n = imsg_get(ibuf, &imsg)) == -1)
+-				errx(1, "%s: imsg_get error", __func__);
++			if ((n = imsgbuf_get(ibuf, &imsg)) == -1)
++				errx(1, "%s: imsgbuf_get error", __func__);
+ 			if (n == 0)
+ 				break;
+ 
diff --git a/net/pfresolved/patches/patch-proc_c b/net/pfresolved/patches/patch-proc_c
index c316b919498..a7486ff5e32 100644
--- a/net/pfresolved/patches/patch-proc_c
+++ b/net/pfresolved/patches/patch-proc_c
@@ -33,7 +33,17 @@ Index: proc.c
  			close(pp->pp_pipes[dst][n]);
  			pp->pp_pipes[dst][n] = -1;
  		}
-@@ -753,8 +758,8 @@ proc_dispatch(int fd, short event, void *arg)
+@@ -744,8 +749,7 @@ proc_dispatch(int fd, short event, void *arg)
+ 	struct privsep		*ps = p->p_ps;
+ 	struct imsgbuf		*ibuf;
+ 	struct imsg		 imsg;
+-	ssize_t			 n;
+-	int			 verbose;
++	int			 n, verbose;
+ 	const char		*title;
+ 	struct privsep_fd	 pf;
+ 
+@@ -753,8 +757,8 @@ proc_dispatch(int fd, short event, void *arg)
  	ibuf = &iev->ibuf;
  
  	if (event & EV_READ) {
@@ -44,7 +54,7 @@ Index: proc.c
  		if (n == 0) {
  			/* this pipe is dead, so remove the event handler */
  			event_del(&iev->ev);
-@@ -764,13 +769,14 @@ proc_dispatch(int fd, short event, void *arg)
+@@ -764,19 +768,20 @@ proc_dispatch(int fd, short event, void *arg)
  	}
  
  	if (event & EV_WRITE) {
@@ -66,7 +76,15 @@ Index: proc.c
  		}
  	}
  
-@@ -807,7 +813,7 @@ proc_dispatch(int fd, short event, void *arg)
+ 	for (;;) {
+-		if ((n = imsg_get(ibuf, &imsg)) == -1)
+-			fatal("%s: imsg_get", __func__);
++		if ((n = imsgbuf_get(ibuf, &imsg)) == -1)
++			fatal("%s: imsgbuf_get", __func__);
+ 		if (n == 0)
+ 			break;
+ 
+@@ -807,7 +812,7 @@ proc_dispatch(int fd, short event, void *arg)
  		case IMSG_CTL_PROCFD:
  			IMSG_SIZE_CHECK(&imsg, &pf);
  			memcpy(&pf, imsg.data, sizeof(pf));
@@ -75,7 +93,7 @@ Index: proc.c
  			    pf.pf_instance);
  			break;
  		default:
-@@ -836,12 +842,12 @@ void
+@@ -836,12 +841,12 @@ void
  imsg_event_add(struct imsgev *iev)
  {
  	if (iev->handler == NULL) {
@@ -90,7 +108,7 @@ Index: proc.c
  		iev->events |= EV_WRITE;
  
  	event_del(&iev->ev);
-@@ -941,7 +947,8 @@ proc_forward_imsg(struct privsep *ps, struct imsg *ims
+@@ -941,7 +946,8 @@ proc_forward_imsg(struct privsep *ps, struct imsg *ims
      enum privsep_procid id, int n)
  {
  	return (proc_compose_imsg(ps, id, n, imsg->hdr.type,
@@ -100,7 +118,7 @@ Index: proc.c
  }
  
  struct imsgbuf *
-@@ -974,7 +981,7 @@ proc_flush_imsg(struct privsep *ps, enum privsep_proci
+@@ -974,7 +980,7 @@ proc_flush_imsg(struct privsep *ps, enum privsep_proci
  		if ((ibuf = proc_ibuf(ps, id, n)) == NULL)
  			return (-1);
  		do {
diff --git a/net/telescope/patches/patch-control_c b/net/telescope/patches/patch-control_c
new file mode 100644
index 00000000000..ac2676a1ea4
--- /dev/null
+++ b/net/telescope/patches/patch-control_c
@@ -0,0 +1,21 @@
+Index: control.c
+--- control.c.orig
++++ control.c
+@@ -231,7 +231,7 @@ control_dispatch_imsg(int fd, int event, void *bula)
+ {
+ 	struct ctl_conn	*c;
+ 	struct imsg	 imsg;
+-	ssize_t		 n;
++	int		 n;
+ 
+ 	if ((c = control_connbyfd(fd)) == NULL) {
+ 		message("%s: fd %d: not found", __func__, fd);
+@@ -252,7 +252,7 @@ control_dispatch_imsg(int fd, int event, void *bula)
+ 	}
+ 
+ 	for (;;) {
+-		if ((n = imsg_get(&c->iev.ibuf, &imsg)) == -1) {
++		if ((n = imsgbuf_get(&c->iev.ibuf, &imsg)) == -1) {
+ 			control_close(fd);
+ 			return;
+ 		}
diff --git a/net/telescope/patches/patch-net_c b/net/telescope/patches/patch-net_c
new file mode 100644
index 00000000000..31c63ca3239
--- /dev/null
+++ b/net/telescope/patches/patch-net_c
@@ -0,0 +1,24 @@
+Index: net.c
+--- net.c.orig
++++ net.c
+@@ -576,8 +576,7 @@ handle_dispatch_imsg(int fd, int event, void *d)
+ 	struct imsg	 imsg;
+ 	struct req	*req;
+ 	struct get_req	 r;
+-	ssize_t		 n;
+-	int		 certok;
++	int		 certok, n;
+ 
+ 	if (event & EV_READ) {
+ 		if (imsgbuf_read(ibuf) == -1) {
+@@ -593,8 +592,8 @@ handle_dispatch_imsg(int fd, int event, void *d)
+ 	}
+ 
+ 	for (;;) {
+-		if ((n = imsg_get(ibuf, &imsg)) == -1)
+-			err(1, "imsg_get");
++		if ((n = imsgbuf_get(ibuf, &imsg)) == -1)
++			err(1, "imsgbuf_get");
+ 		if (n == 0)
+ 			break;
+ 		switch (imsg_get_type(&imsg)) {
diff --git a/net/telescope/patches/patch-telescope_c b/net/telescope/patches/patch-telescope_c
new file mode 100644
index 00000000000..84cda796a29
--- /dev/null
+++ b/net/telescope/patches/patch-telescope_c
@@ -0,0 +1,24 @@
+Index: telescope.c
+--- telescope.c.orig
++++ telescope.c
+@@ -453,8 +453,7 @@ handle_dispatch_imsg(int fd, int event, void *data)
+ 	struct download	*d;
+ 	const char	*h;
+ 	char		*str, *page;
+-	ssize_t		 n;
+-	int		 code;
++	int		 code, n;
+ 
+ 	if (event & EV_READ) {
+ 		if (imsgbuf_read(imsgbuf) == -1)
+@@ -466,8 +465,8 @@ handle_dispatch_imsg(int fd, int event, void *data)
+ 	}
+ 
+ 	for (;;) {
+-		if ((n = imsg_get(imsgbuf, &imsg)) == -1)
+-			err(1, "imsg_get");
++		if ((n = imsgbuf_get(imsgbuf, &imsg)) == -1)
++			err(1, "imsgbuf_get");
+ 		if (n == 0)
+ 			break;
+ 
diff --git a/net/thingsd/patches/patch-thingsctl_thingsctl_c b/net/thingsd/patches/patch-thingsctl_thingsctl_c
index c16f1c8cc44..ce1845194e9 100644
--- a/net/thingsd/patches/patch-thingsctl_thingsctl_c
+++ b/net/thingsd/patches/patch-thingsctl_thingsctl_c
@@ -27,6 +27,17 @@ Index: thingsctl/thingsctl.c
  			errx(1, "imsg_read error");
  		if (n == 0) {
  			if (res->action == SHOW_PACKETS)
+@@ -202,8 +202,8 @@ main(int argc, char *argv[])
+ 		}
+ 
+ 		while (!done) {
+-			if ((n = imsg_get(ibuf, &imsg)) == -1)
+-				errx(1, "imsg_get error");
++			if ((n = imsgbuf_get(ibuf, &imsg)) == -1)
++				errx(1, "imsgbuf_get error");
+ 			if (n == 0)
+ 				break;
+ 
 @@ -226,7 +226,7 @@ main(int argc, char *argv[])
  					done = 1;
  					break;
diff --git a/net/thingsd/patches/patch-thingsd_control_c b/net/thingsd/patches/patch-thingsd_control_c
index 5b646fa1b76..f8d47201058 100644
--- a/net/thingsd/patches/patch-thingsd_control_c
+++ b/net/thingsd/patches/patch-thingsd_control_c
@@ -24,7 +24,7 @@ Index: thingsd/control.c
  	TAILQ_REMOVE(&ctl_conns, c, entry);
  
  	event_del(&c->iev.ev);
-@@ -397,15 +402,15 @@ control_dispatch_imsg(int fd, short event, void *arg)
+@@ -397,22 +402,22 @@ control_dispatch_imsg(int fd, short event, void *arg)
  	}
  
  	if (event & EV_READ) {
@@ -43,6 +43,14 @@ Index: thingsd/control.c
  			control_close(ps, &imsg, fd, cs);
  			return;
  		}
+ 	}
+ 
+ 	for (;;) {
+-		n = imsg_get(&c->iev.ibuf, &imsg);
++		n = imsgbuf_get(&c->iev.ibuf, &imsg);
+ 		if (n == -1) {
+ 			control_close(ps, &imsg, fd, cs);
+ 			return;
 @@ -505,7 +510,7 @@ control_dispatch_imsg(int fd, short event, void *arg)
  fail:
  	imsg_compose_event(&c->iev, IMSG_CTL_FAIL,
diff --git a/net/thingsd/patches/patch-thingsd_proc_c b/net/thingsd/patches/patch-thingsd_proc_c
index b3a529d04df..2cd903c74ec 100644
--- a/net/thingsd/patches/patch-thingsd_proc_c
+++ b/net/thingsd/patches/patch-thingsd_proc_c
@@ -33,7 +33,17 @@ Index: thingsd/proc.c
  			close(pp->pp_pipes[dst][n]);
  			pp->pp_pipes[dst][n] = -1;
  		}
-@@ -625,7 +630,7 @@ proc_dispatch(int fd, short event, void *arg)
+@@ -616,8 +621,7 @@ proc_dispatch(int fd, short event, void *arg)
+ 	struct privsep		*ps = p->p_ps;
+ 	struct imsgbuf		*ibuf;
+ 	struct imsg		 imsg;
+-	ssize_t			 n;
+-	int			 verbose;
++	int			 n, verbose;
+ 	const char		*title;
+ 	struct privsep_fd	 pf;
+ 
+@@ -625,7 +629,7 @@ proc_dispatch(int fd, short event, void *arg)
  	ibuf = &iev->ibuf;
  
  	if (event & EV_READ) {
@@ -42,7 +52,7 @@ Index: thingsd/proc.c
  			fatal("%s: imsg_read", __func__);
  		if (n == 0) {
  			/* this pipe is dead, so remove the event handler */
-@@ -636,13 +641,14 @@ proc_dispatch(int fd, short event, void *arg)
+@@ -636,19 +640,20 @@ proc_dispatch(int fd, short event, void *arg)
  	}
  
  	if (event & EV_WRITE) {
@@ -63,7 +73,15 @@ Index: thingsd/proc.c
  		}
  	}
  
-@@ -679,7 +685,7 @@ proc_dispatch(int fd, short event, void *arg)
+ 	for (;;) {
+-		if ((n = imsg_get(ibuf, &imsg)) == -1)
+-			fatal("%s: imsg_get", __func__);
++		if ((n = imsgbuf_get(ibuf, &imsg)) == -1)
++			fatal("%s: imsgbuf_get", __func__);
+ 		if (n == 0)
+ 			break;
+ 
+@@ -679,7 +684,7 @@ proc_dispatch(int fd, short event, void *arg)
  		case IMSG_CTL_PROCFD:
  			IMSG_SIZE_CHECK(&imsg, &pf);
  			memcpy(&pf, imsg.data, sizeof(pf));
@@ -72,7 +90,7 @@ Index: thingsd/proc.c
  			    pf.pf_instance);
  			break;
  		default:
-@@ -712,12 +718,12 @@ void
+@@ -712,12 +717,12 @@ void
  imsg_event_add(struct imsgev *iev)
  {
  	if (iev->handler == NULL) {
@@ -87,7 +105,7 @@ Index: thingsd/proc.c
  		iev->events |= EV_WRITE;
  
  	event_del(&iev->ev);
-@@ -814,7 +820,8 @@ proc_forward_imsg(struct privsep *ps, struct imsg *ims
+@@ -814,7 +819,8 @@ proc_forward_imsg(struct privsep *ps, struct imsg *ims
      enum privsep_procid id, int n)
  {
  	return (proc_compose_imsg(ps, id, n, imsg->hdr.type,
@@ -97,7 +115,7 @@ Index: thingsd/proc.c
  }
  
  struct imsgbuf *
-@@ -847,7 +854,7 @@ proc_flush_imsg(struct privsep *ps, enum privsep_proci
+@@ -847,7 +853,7 @@ proc_flush_imsg(struct privsep *ps, enum privsep_proci
  		if ((ibuf = proc_ibuf(ps, id, n)) == NULL)
  			return (-1);
  		do {