From bae10a7571e1873b5687faa731956896790dc64b Mon Sep 17 00:00:00 2001
From: Timo Sirainen <timo.sirainen@open-xchange.com>
Date: Mon, 8 Mar 2021 17:12:08 +0200
Subject: [PATCH] managesieve: Move finishing istream to client_create_finish()

---
 src/managesieve/main.c               |  1 +
 src/managesieve/managesieve-client.c | 20 +++++++++++---------
 src/managesieve/managesieve-client.h |  1 +
 3 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/managesieve/main.c b/src/managesieve/main.c
index 158246c43..49ceac5fc 100644
--- a/src/managesieve/main.c
+++ b/src/managesieve/main.c
@@ -172,6 +172,7 @@ client_create_from_input(const struct mail_storage_service_input *input,
 
 	client = client_create(fd_in, fd_out, input->session_id,
 			       event, mail_user, user, set);
+	client_create_finish(client);
 	T_BEGIN {
 		client_add_input(client, input_buf);
 	} T_END;
diff --git a/src/managesieve/managesieve-client.c b/src/managesieve/managesieve-client.c
index cf1b0cfa2..bacf46002 100644
--- a/src/managesieve/managesieve-client.c
+++ b/src/managesieve/managesieve-client.c
@@ -154,7 +154,6 @@ client_create(int fd_in, int fd_out, const char *session_id,
 
 	o_stream_set_flush_callback(client->output, client_output, client);
 
-	client->io = io_add_istream(client->input, client_input, client);
 	client->last_input = ioloop_time;
 	client->to_idle = timeout_add(CLIENT_IDLE_TIMEOUT_MSECS,
 				      client_idle_timeout, client);
@@ -165,14 +164,6 @@ client_create(int fd_in, int fd_out, const char *session_id,
 	client->cmd.event = event_create(client->event);
 	client->user = user;
 
-	if (set->rawlog_dir[0] != '\0') {
-		(void)iostream_rawlog_create(set->rawlog_dir, &client->input,
-					     &client->output);
-	}
-
-	client->parser = managesieve_parser_create(
-		client->input, set->managesieve_max_line_length);
-
 	client->svinst = svinst;
 	client->storage = storage;
 
@@ -194,6 +185,17 @@ client_create(int fd_in, int fd_out, const char *session_id,
 	return client;
 }
 
+void client_create_finish(struct client *client)
+{
+	if (client->set->rawlog_dir[0] != '\0') {
+		(void)iostream_rawlog_create(client->set->rawlog_dir,
+					     &client->input, &client->output);
+	}
+	client->parser = managesieve_parser_create(
+		client->input, client->set->managesieve_max_line_length);
+	client->io = io_add_istream(client->input, client_input, client);
+}
+
 static const char *client_stats(struct client *client)
 {
 	const struct var_expand_table logout_tab[] = {
diff --git a/src/managesieve/managesieve-client.h b/src/managesieve/managesieve-client.h
index 8367c259c..6053eb6a8 100644
--- a/src/managesieve/managesieve-client.h
+++ b/src/managesieve/managesieve-client.h
@@ -91,6 +91,7 @@ client_create(int fd_in, int fd_out, const char *session_id,
 	      struct event *event, struct mail_user *user,
 	      struct mail_storage_service_user *service_user,
 	      const struct managesieve_settings *set);
+void client_create_finish(struct client *client);
 void client_destroy(struct client *client, const char *reason);
 
 void client_dump_capability(struct client *client);
-- 
GitLab