diff options
Diffstat (limited to 'qemu-char.c')
-rw-r--r-- | qemu-char.c | 36 |
1 files changed, 12 insertions, 24 deletions
diff --git a/qemu-char.c b/qemu-char.c index 115909fd48..e5e80381d7 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -776,6 +776,7 @@ static void mux_chr_close(struct CharDriverState *chr) { MuxDriver *d = chr->opaque; + qemu_chr_fe_deinit(&d->chr); g_free(d); } @@ -884,6 +885,17 @@ bool qemu_chr_fe_init(CharBackend *b, CharDriverState *s, Error **errp) return true; } +void qemu_chr_fe_deinit(CharBackend *b) +{ + assert(b); + + if (b->chr) { + qemu_chr_fe_set_handlers(b, NULL, NULL, NULL, NULL, NULL); + b->chr->avail_connections++; + b->chr = NULL; + } +} + void qemu_chr_fe_set_handlers(CharBackend *b, IOCanReadHandler *fd_can_read, IOReadHandler *fd_read, @@ -4114,7 +4126,6 @@ CharDriverState *qemu_chr_new_noreplay(const char *label, const char *filename) error_report_err(err); } if (chr && qemu_opt_get_bool(opts, "mux", 0)) { - qemu_chr_fe_claim_no_fail(chr); monitor_init(chr, MONITOR_USE_READLINE); } qemu_opts_del(opts); @@ -4190,29 +4201,6 @@ guint qemu_chr_fe_add_watch(CharBackend *be, GIOCondition cond, return tag; } -int qemu_chr_fe_claim(CharDriverState *s) -{ - if (s->avail_connections < 1) { - return -1; - } - s->avail_connections--; - return 0; -} - -void qemu_chr_fe_claim_no_fail(CharDriverState *s) -{ - if (qemu_chr_fe_claim(s) != 0) { - fprintf(stderr, "%s: error chardev \"%s\" already used\n", - __func__, s->label); - exit(1); - } -} - -void qemu_chr_fe_release(CharDriverState *s) -{ - s->avail_connections++; -} - void qemu_chr_fe_disconnect(CharBackend *be) { CharDriverState *chr = be->chr; |