]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: connection: Allow switching to a specific ioloop.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Wed, 17 Jan 2018 01:50:05 +0000 (02:50 +0100)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Mon, 12 Mar 2018 07:22:59 +0000 (09:22 +0200)
src/lib/connection.c
src/lib/connection.h

index 1a5d6b8bd421d59ac313da2b9ae4330c51127c88..a338666e277865d55dd49e4638a719aead9e2228 100644 (file)
@@ -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 *
index bdfde1d81a187a8455e06d17e3d8a86c7d2c2d21..ba355dfc0512adb570d2d166dfce952d9d764935 100644 (file)
@@ -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 *