tcp_chr_free_connection(chr);
if (s->listener) {
- qio_net_listener_set_client_func(s->listener, tcp_chr_accept,
- chr, NULL);
+ qio_net_listener_set_client_func_full(s->listener, tcp_chr_accept,
+ chr, NULL, chr->gcontext);
}
update_disconnected_filename(s);
if (emit_close) {
{
SocketChardev *s = SOCKET_CHARDEV(chr);
+ if (s->listener) {
+ /*
+ * It's possible that chardev context is changed in
+ * qemu_chr_be_update_read_handlers(). Reset it for QIO net
+ * listener if there is.
+ */
+ qio_net_listener_set_client_func_full(s->listener, tcp_chr_accept,
+ chr, NULL, chr->gcontext);
+ }
+
if (!s->connected) {
return;
}
qio_channel_set_delay(s->ioc, false);
}
if (s->listener) {
- qio_net_listener_set_client_func(s->listener, NULL, NULL, NULL);
+ qio_net_listener_set_client_func_full(s->listener, NULL, NULL,
+ NULL, chr->gcontext);
}
if (s->tls_creds) {
tcp_chr_reconn_timer_cancel(s);
qapi_free_SocketAddress(s->addr);
if (s->listener) {
- qio_net_listener_set_client_func(s->listener, NULL, NULL, NULL);
+ qio_net_listener_set_client_func_full(s->listener, NULL, NULL,
+ NULL, chr->gcontext);
object_unref(OBJECT(s->listener));
}
if (s->tls_creds) {
return;
}
if (!s->ioc) {
- qio_net_listener_set_client_func(s->listener, tcp_chr_accept,
- chr, NULL);
+ qio_net_listener_set_client_func_full(s->listener,
+ tcp_chr_accept,
+ chr, NULL,
+ chr->gcontext);
}
} else if (qemu_chr_wait_connected(chr, errp) < 0) {
goto error;