diff --git a/src/util/maildirlock.c b/src/util/maildirlock.c
index 89fbacc3d..a6ebdc71b 100644
--- a/src/util/maildirlock.c
+++ b/src/util/maildirlock.c
@@ -34,6 +34,11 @@ static int maildir_lock(const char *path, unsigned int timeout,
 	return file_dotlock_create(&dotlock_settings, path, 0, dotlock_r);
 }
 
+static void dummy_read(int *fd ATTR_UNUSED)
+{
+	/* this should never be reached anyways */
+}
+
 int main(int argc, const char *argv[])
 {
 	struct dotlock *dotlock;
@@ -91,12 +96,16 @@ int main(int argc, const char *argv[])
 	if (maildir_lock(argv[1], timeout, &dotlock) <= 0)
 		return 1;
 
+	struct io *io = io_add(fd[0], IO_READ, dummy_read, fd);
+
 	/* locked - send a byte */
 	if (write_full(fd[1], "", 1) < 0)
 		i_fatal("write(pipe) failed: %m");
 
 	io_loop_run(ioloop);
 
+	io_remove(&io);
+
 	file_dotlock_delete(&dotlock);
 	lib_signals_deinit();
 

