static void __attribute__((constructor)) coroutine_init(void)
{
if (!g_thread_supported()) {
+#if !GLIB_CHECK_VERSION(2, 31, 0)
g_thread_init(NULL);
+#else
+ fprintf(stderr, "glib threading failed to initialize.\n");
+ exit(1);
+#endif
}
coroutine_cond = g_cond_new();
{
CoroutineGThread *co;
- co = qemu_mallocz(sizeof(*co));
+ co = g_malloc0(sizeof(*co));
co->thread = g_thread_create_full(coroutine_thread, co, 0, TRUE, TRUE,
G_THREAD_PRIORITY_NORMAL, NULL);
if (!co->thread) {
- qemu_free(co);
+ g_free(co);
return NULL;
}
return &co->base;
CoroutineGThread *co = DO_UPCAST(CoroutineGThread, base, co_);
g_thread_join(co->thread);
- qemu_free(co);
+ g_free(co);
}
CoroutineAction qemu_coroutine_switch(Coroutine *from_,
CoroutineGThread *co = g_static_private_get(&coroutine_key);
if (!co) {
- co = qemu_mallocz(sizeof(*co));
+ co = g_malloc0(sizeof(*co));
co->runnable = true;
- g_static_private_set(&coroutine_key, co, (GDestroyNotify)qemu_free);
+ g_static_private_set(&coroutine_key, co, (GDestroyNotify)g_free);
}
return &co->base;