On 01/03/2018 09:44, Peter Xu wrote:
> Generalize the function to create the async QIO task connection. Also,
> fix the context pointer to use the chardev's gcontext.
>
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
> chardev/char-socket.c | 25 ++++++++++++++-----------
> 1 file changed, 14 insertions(+), 11 deletions(-)
>
> diff --git a/chardev/char-socket.c b/chardev/char-socket.c
> index bd90680f5c..cd9db123f2 100644
> --- a/chardev/char-socket.c
> +++ b/chardev/char-socket.c
> @@ -894,11 +894,22 @@ cleanup:
> object_unref(OBJECT(sioc));
> }
>
> +static void tcp_chr_connect_async(Chardev *chr)
> +{
> + SocketChardev *s = SOCKET_CHARDEV(chr);
> + QIOChannelSocket *sioc;
> +
> + sioc = qio_channel_socket_new();
> + tcp_chr_set_client_ioc_name(chr, sioc);
> + qio_channel_socket_connect_async(sioc, s->addr,
> + qemu_chr_socket_connected,
> + chr, NULL, chr->gcontext);
> +}
> +
> static gboolean socket_reconnect_timeout(gpointer opaque)
> {
> Chardev *chr = CHARDEV(opaque);
> SocketChardev *s = SOCKET_CHARDEV(opaque);
> - QIOChannelSocket *sioc;
>
> g_source_unref(s->reconnect_timer);
> s->reconnect_timer = NULL;
> @@ -907,11 +918,7 @@ static gboolean socket_reconnect_timeout(gpointer opaque)
> return false;
> }
>
> - sioc = qio_channel_socket_new();
> - tcp_chr_set_client_ioc_name(chr, sioc);
> - qio_channel_socket_connect_async(sioc, s->addr,
> - qemu_chr_socket_connected,
> - chr, NULL, NULL);
> + tcp_chr_connect_async(chr);
>
> return false;
> }
> @@ -991,11 +998,7 @@ static void qmp_chardev_open_socket(Chardev *chr,
> }
>
> if (s->reconnect_time) {
> - sioc = qio_channel_socket_new();
> - tcp_chr_set_client_ioc_name(chr, sioc);
> - qio_channel_socket_connect_async(sioc, s->addr,
> - qemu_chr_socket_connected,
> - chr, NULL, NULL);
> + tcp_chr_connect_async(chr);
> } else {
> if (s->is_listen) {
> char *name;
>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>