Commit 1dc8a669 authored by Marc-André Lureau's avatar Marc-André Lureau Committed by Peter Maydell
Browse files

char: fix waiting for TLS and telnet connection



Since commit d7a04fd7, tcp_chr_wait_connected() was introduced,
so vhost-user could wait until a backend started successfully. In
vhost-user case, the chr socket must be plain unix, and the chr+vhost
setup happens synchronously during qemu startup.

However, with TLS and telnet socket, initial socket setup happens
asynchronously, and s->connected is not set after the socket is
accepted. In order for tcp_chr_wait_connected() to not keep accepting
new connections and proceed with the last accepted socket, it can
check for s->ioc instead.

Signed-off-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: default avatarDaniel P. Berrange <berrange@redhat.com>
Message-id: 20160816083332.15088-1-marcandre.lureau@redhat.com
Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parent 8afc224f
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -3176,7 +3176,9 @@ static int tcp_chr_wait_connected(CharDriverState *chr, Error **errp)
    TCPCharDriver *s = chr->opaque;
    QIOChannelSocket *sioc;

    while (!s->connected) {
    /* It can't wait on s->connected, since it is set asynchronously
     * in TLS and telnet cases, only wait for an accepted socket */
    while (!s->ioc) {
        if (s->is_listen) {
            fprintf(stderr, "QEMU waiting for connection on: %s\n",
                    chr->filename);