研究qemu事件派发机制,没想到牵扯到了glib,没办法分析一下吧
qemu里面的glib主事件循环的api大概有如下几个
ctx = (AioContext *) g_source_new(&aio_source_funcs, sizeof(AioContext));
g_source_set_can_recurse(&ctx->source, true);
g_source_destroy(&ctx->source);
g_source_set_name(src, "aio-context");
g_source_attach(src, NULL);
g_source_unref(src);
来看下glib主事件是如何处理的吧
GSource *
g_source_new (GSourceFuncs *source_funcs,
guint struct_size)
{
GSource *source;
g_return_val_if_fail (source_funcs != NULL, NULL);
g_return_val_if_fail (struct_size >= sizeof (GSource), NULL);
source = (GSource*) g_malloc0 (struct_size);
source->priv = g_slice_new0 (GSourcePrivate);
sour