Revision 574b711a

b/include/char/char.h
68 68
    void (*chr_close)(struct CharDriverState *chr);
69 69
    void (*chr_accept_input)(struct CharDriverState *chr);
70 70
    void (*chr_set_echo)(struct CharDriverState *chr, bool echo);
71
    void (*chr_guest_open)(struct CharDriverState *chr);
72
    void (*chr_guest_close)(struct CharDriverState *chr);
71
    void (*chr_set_fe_open)(struct CharDriverState *chr, int fe_open);
73 72
    void *opaque;
74 73
    int idle_tag;
75 74
    char *label;
b/qemu-char.c
514 514
    chr->chr_update_read_handler = mux_chr_update_read_handler;
515 515
    chr->chr_accept_input = mux_chr_accept_input;
516 516
    /* Frontend guest-open / -close notification is not support with muxes */
517
    chr->chr_guest_open = NULL;
518
    chr->chr_guest_close = NULL;
517
    chr->chr_set_fe_open = NULL;
519 518

  
520 519
    /* Muxes are always open on creation */
521 520
    qemu_chr_be_generic_open(chr);
......
3425 3424
        return;
3426 3425
    }
3427 3426
    chr->fe_open = fe_open;
3428
    if (fe_open && chr->chr_guest_open) {
3429
        chr->chr_guest_open(chr);
3430
    }
3431
    if (!fe_open && chr->chr_guest_close) {
3432
        chr->chr_guest_close(chr);
3427
    if (chr->chr_set_fe_open) {
3428
        chr->chr_set_fe_open(chr, fe_open);
3433 3429
    }
3434 3430
}
3435 3431

  
b/spice-qemu-char.c
176 176
    g_free(s);
177 177
}
178 178

  
179
static void spice_chr_guest_open(struct CharDriverState *chr)
179
static void spice_chr_set_fe_open(struct CharDriverState *chr, int fe_open)
180 180
{
181 181
    SpiceCharDriver *s = chr->opaque;
182
    vmc_register_interface(s);
183
}
184

  
185
static void spice_chr_guest_close(struct CharDriverState *chr)
186
{
187
    SpiceCharDriver *s = chr->opaque;
188
    vmc_unregister_interface(s);
182
    if (fe_open) {
183
        vmc_register_interface(s);
184
    } else {
185
        vmc_unregister_interface(s);
186
    }
189 187
}
190 188

  
191 189
static void print_allowed_subtypes(void)
......
218 216
    chr->opaque = s;
219 217
    chr->chr_write = spice_chr_write;
220 218
    chr->chr_close = spice_chr_close;
221
    chr->chr_guest_open = spice_chr_guest_open;
222
    chr->chr_guest_close = spice_chr_guest_close;
219
    chr->chr_set_fe_open = spice_chr_set_fe_open;
223 220

  
224 221
    QLIST_INSERT_HEAD(&spice_chars, s, next);
225 222

  

Also available in: Unified diff