diff --git a/chardev/char.c b/chardev/char.c index e77564060d..c89cae1cd5 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -41,6 +41,10 @@ #include "chardev/char-mux.h" +#ifdef XBOX +extern GMainContext *qemu_main_context; /* FIXME: Cleanup */ +#endif + /***********************************************************/ /* character device */ @@ -203,7 +207,17 @@ void qemu_chr_be_update_read_handlers(Chardev *s, assert(qemu_chr_has_feature(s, QEMU_CHAR_FEATURE_GCONTEXT) || !context); + +#ifdef XBOX + if (context != NULL) { +#endif + s->gcontext = context; + +#ifdef XBOX + } +#endif + if (cc->chr_update_read_handler) { cc->chr_update_read_handler(s); } @@ -249,6 +263,12 @@ static void char_init(Object *obj) Chardev *chr = CHARDEV(obj); chr->logfd = -1; + +#ifdef XBOX + /* Explicitly default to qemu_main_context, not the global context via NULL. */ + chr->gcontext = qemu_main_context; +#endif + qemu_mutex_init(&chr->chr_write_lock); /* @@ -971,8 +991,17 @@ static Chardev *chardev_new(const char *id, const char *typename, obj = object_new(typename); chr = CHARDEV(obj); chr->label = g_strdup(id); + +#ifdef XBOX + if (gcontext != NULL) { +#endif + chr->gcontext = gcontext; +#ifdef XBOX + } +#endif + qemu_char_open(chr, backend, &be_opened, &local_err); if (local_err) { goto end;