IOThread is a general framework that contains IO loop environment and a real thread behind. It's also good to be used internally inside qemu. Provide some helpers for it to create iothreads to be used internally.
Signed-off-by: Peter Xu <pet...@redhat.com> --- include/sysemu/iothread.h | 8 ++++++++ iothread.c | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/include/sysemu/iothread.h b/include/sysemu/iothread.h index d2985b3..b07663f 100644 --- a/include/sysemu/iothread.h +++ b/include/sysemu/iothread.h @@ -46,4 +46,12 @@ AioContext *iothread_get_aio_context(IOThread *iothread); void iothread_stop_all(void); GMainContext *iothread_get_g_main_context(IOThread *iothread); +/* + * Helpers used to allocate iothreads for internal use. These + * iothreads will not be seen by monitor clients when query using + * "query-iothreads". + */ +IOThread *iothread_create(const char *id, Error **errp); +void iothread_destroy(IOThread *iothread); + #endif /* IOTHREAD_H */ diff --git a/iothread.c b/iothread.c index 44c8944..74e400c 100644 --- a/iothread.c +++ b/iothread.c @@ -354,3 +354,24 @@ GMainContext *iothread_get_g_main_context(IOThread *iothread) return iothread->worker_context; } + +static Object *iothread_get_internal_parent(void) +{ + return container_get(object_get_root(), "/internal-iothreads"); +} + +IOThread *iothread_create(const char *id, Error **errp) +{ + Object *obj; + + obj = object_new_with_props(TYPE_IOTHREAD, + iothread_get_internal_parent(), + id, errp, NULL); + + return IOTHREAD(obj); +} + +void iothread_destroy(IOThread *iothread) +{ + object_unparent(OBJECT(iothread)); +} -- 2.7.4