Re: [PATCH] chardev: Don't unregister yank upon async path connection failure
Marc-André Lureau writes:
> On Wed, Jun 3, 2026 at 6:11 PM Fabiano Rosas wrote:
>>
>> Commit 5c102ac9 ("chardev: Consolidate yank registration") has moved
>> yank registration in the tcp_chr_connect_client_async() path to after
>> the connection is successful. If qio_channel_socket_connect_sync()
>> fails early, there will be no yank registered to be unregistered in
>> the error path, leading to assert.
>>
>> Remove the now-extraneous unregister.
>>
>> Cc: [email protected]
>> Fixes: 5c102ac9 ("chardev: Consolidate yank registration")
>> Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3528
>> Signed-off-by: Fabiano Rosas
>> ---
>> chardev/char-socket.c | 5 -
>> 1 file changed, 5 deletions(-)
>>
>> diff --git a/chardev/char-socket.c b/chardev/char-socket.c
>> index e064b105c5..99e01a4875 100644
>> --- a/chardev/char-socket.c
>> +++ b/chardev/char-socket.c
>> @@ -1128,11 +1128,6 @@ static void qemu_chr_socket_connected(QIOTask *task,
>> void *opaque)
>>
>> if (qio_task_propagate_error(task, &err)) {
>> tcp_chr_change_state(s, TCP_CHARDEV_STATE_DISCONNECTED);
>> -if (s->registered_yank) {
>
> Is "registered_yank" stalled too? shouldn't be set to false to avoid
> that path and possibly others?
>
No because registered_yank is about the YankInstance. There's no actual
tracking of the individual YankFns.
>> -yank_unregister_function(CHARDEV_YANK_INSTANCE(chr->label),
>> - char_socket_yank_iochannel,
>> - QIO_CHANNEL(sioc));
>> -}
>> check_report_connect_error(chr, err);
>> goto cleanup;
>> }
>> --
>> 2.53.0
>>
Re: [PATCH] chardev: Don't unregister yank upon async path connection failure
On Wed, Jun 3, 2026 at 6:11 PM Fabiano Rosas wrote:
>
> Commit 5c102ac9 ("chardev: Consolidate yank registration") has moved
> yank registration in the tcp_chr_connect_client_async() path to after
> the connection is successful. If qio_channel_socket_connect_sync()
> fails early, there will be no yank registered to be unregistered in
> the error path, leading to assert.
>
> Remove the now-extraneous unregister.
>
> Cc: [email protected]
> Fixes: 5c102ac9 ("chardev: Consolidate yank registration")
> Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3528
> Signed-off-by: Fabiano Rosas
> ---
> chardev/char-socket.c | 5 -
> 1 file changed, 5 deletions(-)
>
> diff --git a/chardev/char-socket.c b/chardev/char-socket.c
> index e064b105c5..99e01a4875 100644
> --- a/chardev/char-socket.c
> +++ b/chardev/char-socket.c
> @@ -1128,11 +1128,6 @@ static void qemu_chr_socket_connected(QIOTask *task,
> void *opaque)
>
> if (qio_task_propagate_error(task, &err)) {
> tcp_chr_change_state(s, TCP_CHARDEV_STATE_DISCONNECTED);
> -if (s->registered_yank) {
Is "registered_yank" stalled too? shouldn't be set to false to avoid
that path and possibly others?
> -yank_unregister_function(CHARDEV_YANK_INSTANCE(chr->label),
> - char_socket_yank_iochannel,
> - QIO_CHANNEL(sioc));
> -}
> check_report_connect_error(chr, err);
> goto cleanup;
> }
> --
> 2.53.0
>
[PATCH] chardev: Don't unregister yank upon async path connection failure
Commit 5c102ac9 ("chardev: Consolidate yank registration") has moved
yank registration in the tcp_chr_connect_client_async() path to after
the connection is successful. If qio_channel_socket_connect_sync()
fails early, there will be no yank registered to be unregistered in
the error path, leading to assert.
Remove the now-extraneous unregister.
Cc: [email protected]
Fixes: 5c102ac9 ("chardev: Consolidate yank registration")
Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3528
Signed-off-by: Fabiano Rosas
---
chardev/char-socket.c | 5 -
1 file changed, 5 deletions(-)
diff --git a/chardev/char-socket.c b/chardev/char-socket.c
index e064b105c5..99e01a4875 100644
--- a/chardev/char-socket.c
+++ b/chardev/char-socket.c
@@ -1128,11 +1128,6 @@ static void qemu_chr_socket_connected(QIOTask *task,
void *opaque)
if (qio_task_propagate_error(task, &err)) {
tcp_chr_change_state(s, TCP_CHARDEV_STATE_DISCONNECTED);
-if (s->registered_yank) {
-yank_unregister_function(CHARDEV_YANK_INSTANCE(chr->label),
- char_socket_yank_iochannel,
- QIO_CHANNEL(sioc));
-}
check_report_connect_error(chr, err);
goto cleanup;
}
--
2.53.0
