From 43b57457cc6b10b2d0b699b0730b4bed3b3bf954 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Wed, 17 Jan 2018 02:50:05 +0100 Subject: [PATCH] lib: connection: Allow switching to a specific ioloop. --- src/lib/connection.c | 16 +++++++++++----- src/lib/connection.h | 3 +++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/lib/connection.c b/src/lib/connection.c index 1a5d6b8bd4..a338666e27 100644 --- a/src/lib/connection.c +++ b/src/lib/connection.c @@ -426,16 +426,22 @@ const char *connection_input_timeout_reason(struct connection *conn) } } -void connection_switch_ioloop(struct connection *conn) +void connection_switch_ioloop_to(struct connection *conn, + struct ioloop *ioloop) { if (conn->io != NULL) - conn->io = io_loop_move_io(&conn->io); + conn->io = io_loop_move_io_to(ioloop, &conn->io); if (conn->to != NULL) - conn->to = io_loop_move_timeout(&conn->to); + conn->to = io_loop_move_timeout_to(ioloop, &conn->to); if (conn->input != NULL) - i_stream_switch_ioloop(conn->input); + i_stream_switch_ioloop_to(conn->input, ioloop); if (conn->output != NULL) - o_stream_switch_ioloop(conn->output); + o_stream_switch_ioloop_to(conn->output, ioloop); +} + +void connection_switch_ioloop(struct connection *conn) +{ + connection_switch_ioloop_to(conn, current_ioloop); } struct connection_list * diff --git a/src/lib/connection.h b/src/lib/connection.h index bdfde1d81a..ba355dfc05 100644 --- a/src/lib/connection.h +++ b/src/lib/connection.h @@ -3,6 +3,7 @@ #include "net.h" +struct ioloop; struct connection; enum connection_behavior { @@ -143,6 +144,8 @@ const char *connection_disconnect_reason(struct connection *conn); e.g. "No input for 10.023 secs". */ const char *connection_input_timeout_reason(struct connection *conn); +void connection_switch_ioloop_to(struct connection *conn, + struct ioloop *ioloop); void connection_switch_ioloop(struct connection *conn); struct connection_list * -- 2.47.3