mux: simplfy muxes_realize_done

mux_chr_event() already send events to all backends, rename it,
export it, and use it from muxes_realize_done. This should help abstract
away mux implementation.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
This commit is contained in:
Marc-André Lureau 2016-12-14 14:40:45 +03:00
parent 6361813527
commit bed3bb9b7e
3 changed files with 11 additions and 11 deletions

View file

@ -114,7 +114,7 @@ static void mux_print_help(Chardev *chr)
} }
} }
void mux_chr_send_event(MuxChardev *d, int mux_nr, int event) static void mux_chr_send_event(MuxChardev *d, int mux_nr, int event)
{ {
CharBackend *be = d->backends[mux_nr]; CharBackend *be = d->backends[mux_nr];
@ -222,9 +222,9 @@ static void mux_chr_read(void *opaque, const uint8_t *buf, int size)
bool muxes_realized; bool muxes_realized;
static void mux_chr_event(void *opaque, int event) void mux_chr_send_all_event(Chardev *chr, int event)
{ {
MuxChardev *d = MUX_CHARDEV(opaque); MuxChardev *d = MUX_CHARDEV(chr);
int i; int i;
if (!muxes_realized) { if (!muxes_realized) {
@ -237,6 +237,11 @@ static void mux_chr_event(void *opaque, int event)
} }
} }
static void mux_chr_event(void *opaque, int event)
{
mux_chr_send_all_event(CHARDEV(opaque), event);
}
static GSource *mux_chr_add_watch(Chardev *s, GIOCondition cond) static GSource *mux_chr_add_watch(Chardev *s, GIOCondition cond)
{ {
MuxChardev *d = MUX_CHARDEV(s); MuxChardev *d = MUX_CHARDEV(s);

View file

@ -58,6 +58,6 @@ typedef struct MuxChardev {
void mux_chr_set_handlers(Chardev *chr, GMainContext *context); void mux_chr_set_handlers(Chardev *chr, GMainContext *context);
void mux_set_focus(Chardev *chr, int focus); void mux_set_focus(Chardev *chr, int focus);
void mux_chr_send_event(MuxChardev *d, int mux_nr, int event); void mux_chr_send_all_event(Chardev *chr, int event);
#endif /* CHAR_MUX_H */ #endif /* CHAR_MUX_H */

View file

@ -451,22 +451,17 @@ static void muxes_realize_done(Notifier *notifier, void *unused)
{ {
Chardev *chr; Chardev *chr;
muxes_realized = true;
QTAILQ_FOREACH(chr, &chardevs, next) { QTAILQ_FOREACH(chr, &chardevs, next) {
if (CHARDEV_IS_MUX(chr)) { if (CHARDEV_IS_MUX(chr)) {
MuxChardev *d = MUX_CHARDEV(chr);
int i;
/* send OPENED to all already-attached FEs */ /* send OPENED to all already-attached FEs */
for (i = 0; i < d->mux_cnt; i++) { mux_chr_send_all_event(CHARDEV(chr), CHR_EVENT_OPENED);
mux_chr_send_event(d, i, CHR_EVENT_OPENED);
}
/* mark mux as OPENED so any new FEs will immediately receive /* mark mux as OPENED so any new FEs will immediately receive
* OPENED event * OPENED event
*/ */
qemu_chr_be_event(chr, CHR_EVENT_OPENED); qemu_chr_be_event(chr, CHR_EVENT_OPENED);
} }
} }
muxes_realized = true;
} }
static Notifier muxes_realize_notify = { static Notifier muxes_realize_notify = {