]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: Recreate connection IO after streams change
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 8 Feb 2018 08:53:50 +0000 (10:53 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 8 Feb 2018 10:55:47 +0000 (12:55 +0200)
This fixes hangs after STARTTLS.

Originally by Stephan Bosch

src/lib-smtp/smtp-client-connection.c

index a6426720eb42b45dca7446acf63f0dcf5f7ad48a..e4b021bab8c0641933ac80ae92590138823767ec 100644 (file)
@@ -1164,6 +1164,8 @@ smtp_client_connection_streams_changed(struct smtp_client_connection *conn)
                smtp_reply_parser_set_stream(conn->reply_parser,
                                             conn->conn.input);
        }
+
+       connection_streams_changed(&conn->conn);
 }
 
 static int
@@ -1222,6 +1224,7 @@ smtp_client_connection_ssl_init(struct smtp_client_connection *conn,
                conn->conn.output = conn->raw_output;
        }
 
+       io_remove(&conn->conn.io);
        if (io_stream_create_ssl_client(conn->ssl_ctx,
                conn->host, conn->set.ssl,
                &conn->conn.input, &conn->conn.output,
@@ -1231,6 +1234,9 @@ smtp_client_connection_ssl_init(struct smtp_client_connection *conn,
                        conn->conn.name, error);
                return -1;
        }
+       conn->conn.io = io_add_istream(conn->conn.input,
+                                      smtp_client_connection_input,
+                                      &conn->conn);
        smtp_client_connection_streams_changed(conn);
 
        ssl_iostream_set_handshake_callback(conn->ssl_iostream,