char: remove explicit_fe_open, use a set_handlers argument

No need to keep explicit_fe_open around if it affects only a
qemu_chr_fe_set_handlers(). Use an additional argument instead.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20161022095318.17775-24-marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Marc-André Lureau 2016-10-22 12:53:03 +03:00 committed by Paolo Bonzini
parent 72ac876248
commit 39ab61c6d0
44 changed files with 67 additions and 60 deletions

View File

@ -106,7 +106,7 @@ static void rng_egd_opened(RngBackend *b, Error **errp)
/* FIXME we should resubmit pending requests when the CDS reconnects. */ /* FIXME we should resubmit pending requests when the CDS reconnects. */
qemu_chr_fe_set_handlers(&s->chr, rng_egd_chr_can_read, qemu_chr_fe_set_handlers(&s->chr, rng_egd_chr_can_read,
rng_egd_chr_read, NULL, s, NULL); rng_egd_chr_read, NULL, s, NULL, true);
} }
static void rng_egd_set_chardev(Object *obj, const char *value, Error **errp) static void rng_egd_set_chardev(Object *obj, const char *value, Error **errp)

View File

@ -1779,7 +1779,7 @@ int gdbserver_start(const char *device)
if (chr) { if (chr) {
qemu_chr_fe_init(&s->chr, chr, &error_abort); qemu_chr_fe_init(&s->chr, chr, &error_abort);
qemu_chr_fe_set_handlers(&s->chr, gdb_chr_can_receive, gdb_chr_receive, qemu_chr_fe_set_handlers(&s->chr, gdb_chr_can_receive, gdb_chr_receive,
gdb_chr_event, NULL, NULL); gdb_chr_event, NULL, NULL, true);
} }
s->state = chr ? RS_IDLE : RS_INACTIVE; s->state = chr ? RS_IDLE : RS_INACTIVE;
s->mon_chr = mon_chr; s->mon_chr = mon_chr;

View File

@ -1976,7 +1976,7 @@ static void pxa2xx_fir_realize(DeviceState *dev, Error **errp)
PXA2xxFIrState *s = PXA2XX_FIR(dev); PXA2xxFIrState *s = PXA2XX_FIR(dev);
qemu_chr_fe_set_handlers(&s->chr, pxa2xx_fir_is_empty, qemu_chr_fe_set_handlers(&s->chr, pxa2xx_fir_is_empty,
pxa2xx_fir_rx, pxa2xx_fir_event, s, NULL); pxa2xx_fir_rx, pxa2xx_fir_event, s, NULL, true);
} }
static bool pxa2xx_fir_vmstate_validate(void *opaque, int version_id) static bool pxa2xx_fir_vmstate_validate(void *opaque, int version_id)

View File

@ -1241,7 +1241,7 @@ static void strongarm_uart_init(Object *obj)
strongarm_uart_can_receive, strongarm_uart_can_receive,
strongarm_uart_receive, strongarm_uart_receive,
strongarm_uart_event, strongarm_uart_event,
s, NULL); s, NULL, true);
} }
static void strongarm_uart_reset(DeviceState *dev) static void strongarm_uart_reset(DeviceState *dev)

View File

@ -279,7 +279,7 @@ static void bcm2835_aux_realize(DeviceState *dev, Error **errp)
BCM2835AuxState *s = BCM2835_AUX(dev); BCM2835AuxState *s = BCM2835_AUX(dev);
qemu_chr_fe_set_handlers(&s->chr, bcm2835_aux_can_receive, qemu_chr_fe_set_handlers(&s->chr, bcm2835_aux_can_receive,
bcm2835_aux_receive, NULL, s, NULL); bcm2835_aux_receive, NULL, s, NULL, true);
} }
static Property bcm2835_aux_props[] = { static Property bcm2835_aux_props[] = {

View File

@ -467,7 +467,7 @@ static void cadence_uart_realize(DeviceState *dev, Error **errp)
fifo_trigger_update, s); fifo_trigger_update, s);
qemu_chr_fe_set_handlers(&s->chr, uart_can_receive, uart_receive, qemu_chr_fe_set_handlers(&s->chr, uart_can_receive, uart_receive,
uart_event, s, NULL); uart_event, s, NULL, true);
} }
static void cadence_uart_init(Object *obj) static void cadence_uart_init(Object *obj)

View File

@ -92,7 +92,7 @@ static void debugcon_realize_core(DebugconState *s, Error **errp)
return; return;
} }
qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, NULL, s, NULL); qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, NULL, s, NULL, true);
} }
static void debugcon_isa_realizefn(DeviceState *dev, Error **errp) static void debugcon_isa_realizefn(DeviceState *dev, Error **errp)

View File

@ -146,7 +146,7 @@ static void digic_uart_realize(DeviceState *dev, Error **errp)
DigicUartState *s = DIGIC_UART(dev); DigicUartState *s = DIGIC_UART(dev);
qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx, qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx,
uart_event, s, NULL); uart_event, s, NULL, true);
} }
static void digic_uart_init(Object *obj) static void digic_uart_init(Object *obj)

View File

@ -1016,7 +1016,7 @@ static void escc_realize(DeviceState *dev, Error **errp)
s->chn[i].clock = s->frequency / 2; s->chn[i].clock = s->frequency / 2;
qemu_chr_fe_set_handlers(&s->chn[i].chr, serial_can_receive, qemu_chr_fe_set_handlers(&s->chn[i].chr, serial_can_receive,
serial_receive1, serial_event, serial_receive1, serial_event,
&s->chn[i], NULL); &s->chn[i], NULL, true);
} }
} }

View File

@ -233,7 +233,7 @@ static void etraxfs_ser_realize(DeviceState *dev, Error **errp)
qemu_chr_fe_set_handlers(&s->chr, qemu_chr_fe_set_handlers(&s->chr,
serial_can_receive, serial_receive, serial_can_receive, serial_receive,
serial_event, s, NULL); serial_event, s, NULL, true);
} }
static void etraxfs_ser_class_init(ObjectClass *klass, void *data) static void etraxfs_ser_class_init(ObjectClass *klass, void *data)

View File

@ -642,7 +642,7 @@ static int exynos4210_uart_init(SysBusDevice *dev)
qemu_chr_fe_set_handlers(&s->chr, exynos4210_uart_can_receive, qemu_chr_fe_set_handlers(&s->chr, exynos4210_uart_can_receive,
exynos4210_uart_receive, exynos4210_uart_event, exynos4210_uart_receive, exynos4210_uart_event,
s, NULL); s, NULL, true);
return 0; return 0;
} }

View File

@ -247,7 +247,7 @@ static int grlib_apbuart_init(SysBusDevice *dev)
grlib_apbuart_can_receive, grlib_apbuart_can_receive,
grlib_apbuart_receive, grlib_apbuart_receive,
grlib_apbuart_event, grlib_apbuart_event,
uart, NULL); uart, NULL, true);
sysbus_init_irq(dev, &uart->irq); sysbus_init_irq(dev, &uart->irq);

View File

@ -316,7 +316,7 @@ static void imx_serial_realize(DeviceState *dev, Error **errp)
DPRINTF("char dev for uart: %p\n", qemu_chr_fe_get_driver(&s->chr)); DPRINTF("char dev for uart: %p\n", qemu_chr_fe_get_driver(&s->chr));
qemu_chr_fe_set_handlers(&s->chr, imx_can_receive, imx_receive, qemu_chr_fe_set_handlers(&s->chr, imx_can_receive, imx_receive,
imx_event, s, NULL); imx_event, s, NULL, true);
} }
static void imx_serial_init(Object *obj) static void imx_serial_init(Object *obj)

View File

@ -544,7 +544,8 @@ static void ipoctal_realize(DeviceState *dev, Error **errp)
/* Redirect IP-Octal channels to host character devices */ /* Redirect IP-Octal channels to host character devices */
if (qemu_chr_fe_get_driver(&ch->dev)) { if (qemu_chr_fe_get_driver(&ch->dev)) {
qemu_chr_fe_set_handlers(&ch->dev, hostdev_can_receive, qemu_chr_fe_set_handlers(&ch->dev, hostdev_can_receive,
hostdev_receive, hostdev_event, ch, NULL); hostdev_receive, hostdev_event,
ch, NULL, true);
DPRINTF("Redirecting channel %u to %s\n", i, ch->dev->label); DPRINTF("Redirecting channel %u to %s\n", i, ch->dev->label);
} else { } else {
DPRINTF("Could not redirect channel %u, no chardev set\n", i); DPRINTF("Could not redirect channel %u, no chardev set\n", i);

View File

@ -119,7 +119,7 @@ static void lm32_juart_realize(DeviceState *dev, Error **errp)
LM32JuartState *s = LM32_JUART(dev); LM32JuartState *s = LM32_JUART(dev);
qemu_chr_fe_set_handlers(&s->chr, juart_can_rx, juart_rx, qemu_chr_fe_set_handlers(&s->chr, juart_can_rx, juart_rx,
juart_event, s, NULL); juart_event, s, NULL, true);
} }
static const VMStateDescription vmstate_lm32_juart = { static const VMStateDescription vmstate_lm32_juart = {

View File

@ -266,7 +266,7 @@ static void lm32_uart_realize(DeviceState *dev, Error **errp)
LM32UartState *s = LM32_UART(dev); LM32UartState *s = LM32_UART(dev);
qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx, qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx,
uart_event, s, NULL); uart_event, s, NULL, true);
} }
static const VMStateDescription vmstate_lm32_uart = { static const VMStateDescription vmstate_lm32_uart = {

View File

@ -284,7 +284,8 @@ void *mcf_uart_init(qemu_irq irq, CharDriverState *chr)
if (chr) { if (chr) {
qemu_chr_fe_init(&s->chr, chr, &error_abort); qemu_chr_fe_init(&s->chr, chr, &error_abort);
qemu_chr_fe_set_handlers(&s->chr, mcf_uart_can_receive, qemu_chr_fe_set_handlers(&s->chr, mcf_uart_can_receive,
mcf_uart_receive, mcf_uart_event, s, NULL); mcf_uart_receive, mcf_uart_event,
s, NULL, true);
} }
mcf_uart_reset(s); mcf_uart_reset(s);
return s; return s;

View File

@ -199,7 +199,7 @@ static void milkymist_uart_realize(DeviceState *dev, Error **errp)
MilkymistUartState *s = MILKYMIST_UART(dev); MilkymistUartState *s = MILKYMIST_UART(dev);
qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx, qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx,
uart_event, s, NULL); uart_event, s, NULL, true);
} }
static void milkymist_uart_init(Object *obj) static void milkymist_uart_init(Object *obj)

View File

@ -329,7 +329,7 @@ static void pl011_realize(DeviceState *dev, Error **errp)
PL011State *s = PL011(dev); PL011State *s = PL011(dev);
qemu_chr_fe_set_handlers(&s->chr, pl011_can_receive, pl011_receive, qemu_chr_fe_set_handlers(&s->chr, pl011_can_receive, pl011_receive,
pl011_event, s, NULL); pl011_event, s, NULL, true);
} }
static void pl011_class_init(ObjectClass *oc, void *data) static void pl011_class_init(ObjectClass *oc, void *data)

View File

@ -313,7 +313,7 @@ static int console_init(SCLPEvent *event)
console_available = true; console_available = true;
qemu_chr_fe_set_handlers(&scon->chr, chr_can_read, qemu_chr_fe_set_handlers(&scon->chr, chr_can_read,
chr_read, NULL, scon, NULL); chr_read, NULL, scon, NULL, true);
return 0; return 0;
} }

View File

@ -228,7 +228,7 @@ static int console_init(SCLPEvent *event)
} }
console_available = true; console_available = true;
qemu_chr_fe_set_handlers(&scon->chr, chr_can_read, qemu_chr_fe_set_handlers(&scon->chr, chr_can_read,
chr_read, NULL, scon, NULL); chr_read, NULL, scon, NULL, true);
return 0; return 0;
} }

View File

@ -897,7 +897,7 @@ void serial_realize_core(SerialState *s, Error **errp)
qemu_register_reset(serial_reset, s); qemu_register_reset(serial_reset, s);
qemu_chr_fe_set_handlers(&s->chr, serial_can_receive1, serial_receive1, qemu_chr_fe_set_handlers(&s->chr, serial_can_receive1, serial_receive1,
serial_event, s, NULL); serial_event, s, NULL, true);
fifo8_create(&s->recv_fifo, UART_FIFO_LENGTH); fifo8_create(&s->recv_fifo, UART_FIFO_LENGTH);
fifo8_create(&s->xmit_fifo, UART_FIFO_LENGTH); fifo8_create(&s->xmit_fifo, UART_FIFO_LENGTH);
serial_reset(s); serial_reset(s);

View File

@ -400,7 +400,7 @@ void sh_serial_init(MemoryRegion *sysmem,
qemu_chr_fe_init(&s->chr, chr, &error_abort); qemu_chr_fe_init(&s->chr, chr, &error_abort);
qemu_chr_fe_set_handlers(&s->chr, sh_serial_can_receive1, qemu_chr_fe_set_handlers(&s->chr, sh_serial_can_receive1,
sh_serial_receive1, sh_serial_receive1,
sh_serial_event, s, NULL); sh_serial_event, s, NULL, true);
} }
s->eri = eri_source; s->eri = eri_source;

View File

@ -75,7 +75,7 @@ static void spapr_vty_realize(VIOsPAPRDevice *sdev, Error **errp)
} }
qemu_chr_fe_set_handlers(&dev->chardev, vty_can_receive, qemu_chr_fe_set_handlers(&dev->chardev, vty_can_receive,
vty_receive, NULL, dev, NULL); vty_receive, NULL, dev, NULL, true);
} }
/* Forward declaration */ /* Forward declaration */

View File

@ -207,7 +207,7 @@ static void stm32f2xx_usart_realize(DeviceState *dev, Error **errp)
STM32F2XXUsartState *s = STM32F2XX_USART(dev); STM32F2XXUsartState *s = STM32F2XX_USART(dev);
qemu_chr_fe_set_handlers(&s->chr, stm32f2xx_usart_can_receive, qemu_chr_fe_set_handlers(&s->chr, stm32f2xx_usart_can_receive,
stm32f2xx_usart_receive, NULL, s, NULL); stm32f2xx_usart_receive, NULL, s, NULL, true);
} }
static void stm32f2xx_usart_class_init(ObjectClass *klass, void *data) static void stm32f2xx_usart_class_init(ObjectClass *klass, void *data)

View File

@ -187,14 +187,12 @@ static void virtconsole_realize(DeviceState *dev, Error **errp)
* trigger open/close of the device * trigger open/close of the device
*/ */
if (k->is_console) { if (k->is_console) {
chr->explicit_fe_open = 0;
qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read,
NULL, vcon, NULL); NULL, vcon, NULL, true);
virtio_serial_open(port); virtio_serial_open(port);
} else { } else {
chr->explicit_fe_open = 1;
qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read,
chr_event, vcon, NULL); chr_event, vcon, NULL, false);
} }
} }
} }

View File

@ -245,7 +245,7 @@ static int con_initialise(struct XenDevice *xendev)
xen_be_bind_evtchn(&con->xendev); xen_be_bind_evtchn(&con->xendev);
qemu_chr_fe_set_handlers(&con->chr, xencons_can_receive, qemu_chr_fe_set_handlers(&con->chr, xencons_can_receive,
xencons_receive, NULL, con, NULL); xencons_receive, NULL, con, NULL, true);
xen_be_printf(xendev, 1, "ring mfn %d, remote port %d, local port %d, limit %zd\n", xen_be_printf(xendev, 1, "ring mfn %d, remote port %d, local port %d, limit %zd\n",
con->ring_ref, con->ring_ref,

View File

@ -212,7 +212,7 @@ static void xilinx_uartlite_realize(DeviceState *dev, Error **errp)
XilinxUARTLite *s = XILINX_UARTLITE(dev); XilinxUARTLite *s = XILINX_UARTLITE(dev);
qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx, qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx,
uart_event, s, NULL); uart_event, s, NULL, true);
} }
static void xilinx_uartlite_init(Object *obj) static void xilinx_uartlite_init(Object *obj)

View File

@ -448,7 +448,7 @@ static void ipmi_bmc_extern_realize(DeviceState *dev, Error **errp)
} }
qemu_chr_fe_set_handlers(&ibe->chr, can_receive, receive, qemu_chr_fe_set_handlers(&ibe->chr, can_receive, receive,
chr_event, ibe, NULL); chr_event, ibe, NULL, true);
} }
static int ipmi_bmc_extern_post_migrate(void *opaque, int version_id) static int ipmi_bmc_extern_post_migrate(void *opaque, int version_id)

View File

@ -572,7 +572,7 @@ static MaltaFPGAState *malta_fpga_init(MemoryRegion *address_space,
chr = qemu_chr_new("fpga", "vc:320x200"); chr = qemu_chr_new("fpga", "vc:320x200");
qemu_chr_fe_init(&s->display, chr, NULL); qemu_chr_fe_init(&s->display, chr, NULL);
qemu_chr_fe_set_handlers(&s->display, NULL, NULL, qemu_chr_fe_set_handlers(&s->display, NULL, NULL,
malta_fgpa_display_event, s, NULL); malta_fgpa_display_event, s, NULL, true);
s->uart = serial_mm_init(address_space, base + 0x900, 3, uart_irq, s->uart = serial_mm_init(address_space, base + 0x900, 3, uart_irq,
230400, uart_chr, DEVICE_NATIVE_ENDIAN); 230400, uart_chr, DEVICE_NATIVE_ENDIAN);

View File

@ -895,7 +895,7 @@ static void ivshmem_common_realize(PCIDevice *dev, Error **errp)
} }
qemu_chr_fe_set_handlers(&s->server_chr, ivshmem_can_receive, qemu_chr_fe_set_handlers(&s->server_chr, ivshmem_can_receive,
ivshmem_read, NULL, s, NULL); ivshmem_read, NULL, s, NULL, true);
if (ivshmem_setup_interrupts(s) < 0) { if (ivshmem_setup_interrupts(s) < 0) {
error_setg(errp, "failed to initialize interrupts"); error_setg(errp, "failed to initialize interrupts");

View File

@ -353,7 +353,7 @@ static int passthru_initfn(CCIDCardState *base)
qemu_chr_fe_set_handlers(&card->cs, qemu_chr_fe_set_handlers(&card->cs,
ccid_card_vscard_can_read, ccid_card_vscard_can_read,
ccid_card_vscard_read, ccid_card_vscard_read,
ccid_card_vscard_event, card, NULL); ccid_card_vscard_event, card, NULL, true);
ccid_card_vscard_send_init(card); ccid_card_vscard_send_init(card);
} else { } else {
error_report("missing chardev"); error_report("missing chardev");

View File

@ -503,7 +503,7 @@ static void usb_serial_realize(USBDevice *dev, Error **errp)
} }
qemu_chr_fe_set_handlers(&s->cs, usb_serial_can_read, usb_serial_read, qemu_chr_fe_set_handlers(&s->cs, usb_serial_can_read, usb_serial_read,
usb_serial_event, s, NULL); usb_serial_event, s, NULL, true);
usb_serial_handle_reset(dev); usb_serial_handle_reset(dev);
if (chr->be_open && !dev->attached) { if (chr->be_open && !dev->attached) {

View File

@ -1409,7 +1409,7 @@ static void usbredir_realize(USBDevice *udev, Error **errp)
/* Let the backend know we are ready */ /* Let the backend know we are ready */
qemu_chr_fe_set_handlers(&dev->cs, usbredir_chardev_can_read, qemu_chr_fe_set_handlers(&dev->cs, usbredir_chardev_can_read,
usbredir_chardev_read, usbredir_chardev_event, usbredir_chardev_read, usbredir_chardev_event,
dev, NULL); dev, NULL, true);
qemu_add_vm_change_state_handler(usbredir_vm_state_change, dev); qemu_add_vm_change_state_handler(usbredir_vm_state_change, dev);
} }

View File

@ -109,7 +109,6 @@ struct CharDriverState {
int logfd; int logfd;
int be_open; int be_open;
int fe_open; int fe_open;
int explicit_fe_open;
int explicit_be_open; int explicit_be_open;
int avail_connections; int avail_connections;
int is_mux; int is_mux;
@ -449,6 +448,8 @@ void qemu_chr_fe_deinit(CharBackend *b);
* @fd_event: event callback * @fd_event: event callback
* @opaque: an opaque pointer for the callbacks * @opaque: an opaque pointer for the callbacks
* @context: a main loop context or NULL for the default * @context: a main loop context or NULL for the default
* @set_open: whether to call qemu_chr_fe_set_open() implicitely when
* any of the handler is non-NULL
* *
* Set the front end char handlers. The front end takes the focus if * Set the front end char handlers. The front end takes the focus if
* any of the handler is non-NULL. * any of the handler is non-NULL.
@ -460,7 +461,8 @@ void qemu_chr_fe_set_handlers(CharBackend *b,
IOReadHandler *fd_read, IOReadHandler *fd_read,
IOEventHandler *fd_event, IOEventHandler *fd_event,
void *opaque, void *opaque,
GMainContext *context); GMainContext *context,
bool set_open);
/** /**
* @qemu_chr_fe_take_focus: * @qemu_chr_fe_take_focus:

View File

@ -3988,12 +3988,12 @@ void monitor_init(CharDriverState *chr, int flags)
if (monitor_is_qmp(mon)) { if (monitor_is_qmp(mon)) {
qemu_chr_fe_set_handlers(&mon->chr, monitor_can_read, monitor_qmp_read, qemu_chr_fe_set_handlers(&mon->chr, monitor_can_read, monitor_qmp_read,
monitor_qmp_event, mon, NULL); monitor_qmp_event, mon, NULL, true);
qemu_chr_fe_set_echo(&mon->chr, true); qemu_chr_fe_set_echo(&mon->chr, true);
json_message_parser_init(&mon->qmp.parser, handle_qmp_command); json_message_parser_init(&mon->qmp.parser, handle_qmp_command);
} else { } else {
qemu_chr_fe_set_handlers(&mon->chr, monitor_can_read, monitor_read, qemu_chr_fe_set_handlers(&mon->chr, monitor_can_read, monitor_read,
monitor_event, mon, NULL); monitor_event, mon, NULL, true);
} }
qemu_mutex_lock(&monitor_lock); qemu_mutex_lock(&monitor_lock);

View File

@ -451,7 +451,8 @@ static void compare_pri_chr_in(void *opaque, const uint8_t *buf, int size)
ret = net_fill_rstate(&s->pri_rs, buf, size); ret = net_fill_rstate(&s->pri_rs, buf, size);
if (ret == -1) { if (ret == -1) {
qemu_chr_fe_set_handlers(&s->chr_pri_in, NULL, NULL, NULL, NULL, NULL); qemu_chr_fe_set_handlers(&s->chr_pri_in, NULL, NULL, NULL,
NULL, NULL, true);
error_report("colo-compare primary_in error"); error_report("colo-compare primary_in error");
} }
} }
@ -467,7 +468,8 @@ static void compare_sec_chr_in(void *opaque, const uint8_t *buf, int size)
ret = net_fill_rstate(&s->sec_rs, buf, size); ret = net_fill_rstate(&s->sec_rs, buf, size);
if (ret == -1) { if (ret == -1) {
qemu_chr_fe_set_handlers(&s->chr_sec_in, NULL, NULL, NULL, NULL, NULL); qemu_chr_fe_set_handlers(&s->chr_sec_in, NULL, NULL, NULL,
NULL, NULL, true);
error_report("colo-compare secondary_in error"); error_report("colo-compare secondary_in error");
} }
} }
@ -481,9 +483,9 @@ static void *colo_compare_thread(void *opaque)
worker_context = g_main_context_new(); worker_context = g_main_context_new();
qemu_chr_fe_set_handlers(&s->chr_pri_in, compare_chr_can_read, qemu_chr_fe_set_handlers(&s->chr_pri_in, compare_chr_can_read,
compare_pri_chr_in, NULL, s, worker_context); compare_pri_chr_in, NULL, s, worker_context, true);
qemu_chr_fe_set_handlers(&s->chr_sec_in, compare_chr_can_read, qemu_chr_fe_set_handlers(&s->chr_sec_in, compare_chr_can_read,
compare_sec_chr_in, NULL, s, worker_context); compare_sec_chr_in, NULL, s, worker_context, true);
compare_loop = g_main_loop_new(worker_context, FALSE); compare_loop = g_main_loop_new(worker_context, FALSE);

View File

@ -110,7 +110,8 @@ static void redirector_chr_read(void *opaque, const uint8_t *buf, int size)
ret = net_fill_rstate(&s->rs, buf, size); ret = net_fill_rstate(&s->rs, buf, size);
if (ret == -1) { if (ret == -1) {
qemu_chr_fe_set_handlers(&s->chr_in, NULL, NULL, NULL, NULL, NULL); qemu_chr_fe_set_handlers(&s->chr_in, NULL, NULL, NULL,
NULL, NULL, true);
} }
} }
@ -121,7 +122,8 @@ static void redirector_chr_event(void *opaque, int event)
switch (event) { switch (event) {
case CHR_EVENT_CLOSED: case CHR_EVENT_CLOSED:
qemu_chr_fe_set_handlers(&s->chr_in, NULL, NULL, NULL, NULL, NULL); qemu_chr_fe_set_handlers(&s->chr_in, NULL, NULL, NULL,
NULL, NULL, true);
break; break;
default: default:
break; break;
@ -248,7 +250,7 @@ static void filter_redirector_setup(NetFilterState *nf, Error **errp)
qemu_chr_fe_set_handlers(&s->chr_in, redirector_chr_can_read, qemu_chr_fe_set_handlers(&s->chr_in, redirector_chr_can_read,
redirector_chr_read, redirector_chr_event, redirector_chr_read, redirector_chr_event,
nf, NULL); nf, NULL, true);
} }
if (s->outdev) { if (s->outdev) {

View File

@ -775,7 +775,7 @@ static int slirp_guestfwd(SlirpState *s, const char *config_str,
fwd->slirp = s->slirp; fwd->slirp = s->slirp;
qemu_chr_fe_set_handlers(&fwd->hd, guestfwd_can_read, guestfwd_read, qemu_chr_fe_set_handlers(&fwd->hd, guestfwd_can_read, guestfwd_read,
NULL, fwd, NULL); NULL, fwd, NULL, true);
} }
return 0; return 0;

View File

@ -266,7 +266,7 @@ static int net_vhost_user_init(NetClientState *peer, const char *device,
return -1; return -1;
} }
qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, qemu_chr_fe_set_handlers(&s->chr, NULL, NULL,
net_vhost_user_event, nc0->name, NULL); net_vhost_user_event, nc0->name, NULL, true);
} while (!s->started); } while (!s->started);
assert(s->vhost_net); assert(s->vhost_net);

View File

@ -832,7 +832,7 @@ static void mux_chr_set_handlers(CharDriverState *chr, GMainContext *context)
mux_chr_read, mux_chr_read,
mux_chr_event, mux_chr_event,
chr, chr,
context); context, true);
} }
static void mux_set_focus(MuxDriver *d, int focus) static void mux_set_focus(MuxDriver *d, int focus)
@ -931,7 +931,7 @@ void qemu_chr_fe_deinit(CharBackend *b)
assert(b); assert(b);
if (b->chr) { if (b->chr) {
qemu_chr_fe_set_handlers(b, NULL, NULL, NULL, NULL, NULL); qemu_chr_fe_set_handlers(b, NULL, NULL, NULL, NULL, NULL, true);
b->chr->avail_connections++; b->chr->avail_connections++;
b->chr->be = NULL; b->chr->be = NULL;
if (b->chr->is_mux) { if (b->chr->is_mux) {
@ -947,7 +947,8 @@ void qemu_chr_fe_set_handlers(CharBackend *b,
IOReadHandler *fd_read, IOReadHandler *fd_read,
IOEventHandler *fd_event, IOEventHandler *fd_event,
void *opaque, void *opaque,
GMainContext *context) GMainContext *context,
bool set_open)
{ {
CharDriverState *s; CharDriverState *s;
int fe_open; int fe_open;
@ -971,7 +972,7 @@ void qemu_chr_fe_set_handlers(CharBackend *b,
s->chr_update_read_handler(s, context); s->chr_update_read_handler(s, context);
} }
if (!s->explicit_fe_open) { if (set_open) {
qemu_chr_fe_set_open(b, fe_open); qemu_chr_fe_set_open(b, fe_open);
} }

View File

@ -688,7 +688,7 @@ void qtest_init(const char *qtest_chrdev, const char *qtest_log, Error **errp)
qemu_chr_fe_init(&qtest_chr, chr, errp); qemu_chr_fe_init(&qtest_chr, chr, errp);
qemu_chr_fe_set_handlers(&qtest_chr, qtest_can_read, qtest_read, qemu_chr_fe_set_handlers(&qtest_chr, qtest_can_read, qtest_read,
qtest_event, &qtest_chr, NULL); qtest_event, &qtest_chr, NULL, true);
qemu_chr_fe_set_echo(&qtest_chr, true); qemu_chr_fe_set_echo(&qtest_chr, true);
inbuf = g_string_new(""); inbuf = g_string_new("");

View File

@ -129,7 +129,7 @@ static void char_mux_test(void)
fe_read, fe_read,
fe_event, fe_event,
&h1, &h1,
NULL); NULL, true);
qemu_chr_fe_init(&chr_be2, chr, &error_abort); qemu_chr_fe_init(&chr_be2, chr, &error_abort);
qemu_chr_fe_set_handlers(&chr_be2, qemu_chr_fe_set_handlers(&chr_be2,
@ -137,7 +137,7 @@ static void char_mux_test(void)
fe_read, fe_read,
fe_event, fe_event,
&h2, &h2,
NULL); NULL, true);
qemu_chr_fe_take_focus(&chr_be2); qemu_chr_fe_take_focus(&chr_be2);
base = qemu_chr_find("mux-label-base"); base = qemu_chr_find("mux-label-base");
@ -159,7 +159,7 @@ static void char_mux_test(void)
h1.read_count = 0; h1.read_count = 0;
/* remove first handler */ /* remove first handler */
qemu_chr_fe_set_handlers(&chr_be1, NULL, NULL, NULL, NULL, NULL); qemu_chr_fe_set_handlers(&chr_be1, NULL, NULL, NULL, NULL, NULL, true);
qemu_chr_be_write(base, (void *)"hello", 6); qemu_chr_be_write(base, (void *)"hello", 6);
g_assert_cmpint(h1.read_count, ==, 0); g_assert_cmpint(h1.read_count, ==, 0);
g_assert_cmpint(h2.read_count, ==, 0); g_assert_cmpint(h2.read_count, ==, 0);
@ -216,7 +216,7 @@ static void char_null_test(void)
fe_can_read, fe_can_read,
fe_read, fe_read,
fe_event, fe_event,
NULL, NULL); NULL, NULL, true);
ret = qemu_chr_fe_write(&be, (void *)"buf", 4); ret = qemu_chr_fe_write(&be, (void *)"buf", 4);
g_assert_cmpint(ret, ==, 4); g_assert_cmpint(ret, ==, 4);

View File

@ -464,7 +464,7 @@ static void test_server_create_chr(TestServer *server, const gchar *opt)
qemu_chr_fe_init(&server->chr, chr, &error_abort); qemu_chr_fe_init(&server->chr, chr, &error_abort);
qemu_chr_fe_set_handlers(&server->chr, chr_can_read, chr_read, qemu_chr_fe_set_handlers(&server->chr, chr_can_read, chr_read,
chr_event, server, NULL); chr_event, server, NULL, true);
} }
static void test_server_listen(TestServer *server) static void test_server_listen(TestServer *server)