Am 24.10.2013 12:38, schrieb Paolo Bonzini: > Il 23/10/2013 21:26, Stefan Weil ha scritto: >> Am 23.10.2013 11:00, schrieb Paolo Bonzini: >>> Il 23/10/2013 08:39, Michael W. Bombardieri ha scritto: >>>> Hi, >>>> >>>> My newly built qemu/win32 binary (v1.6.1) crashes in qemu-system-i386 and >>>> qemu-system-x86_64 when >>>> booting from an install CD. >>>> >>>> C:\Program Files\qemu>qemu-system-x86_64 -boot d -vnc 0.0.0.0:20 -cdrom >>>> NetBSD-6.1.2-amd64.iso >>>> Assertion failed: qemu_in_coroutine(), file qemu-coroutine-lock.c, line >>>> 99 >>>> >>>> This application has requested the Runtime to terminate it in an >>>> unusual way. >>>> Please contact the application's support team for more information. >>>> >>>> I noticed that qemu-system-sparc still booted OpenBSD/sparc 5.3 install CD >>>> correctly. >>>> No further info at this stage. >>>> Any ideas? >>> It's a known problem that not everyone can reproduce. Please compile >>> with --disable-coroutine-pool on the configure command line. >>> >>> Paolo >> This patch also helps (at least for me, tested native and on Linux / Wine): >> http://repo.or.cz/w/qemu/ar7.git/commit/c777d5d62a729fd8b19847aaa0aad3d7a1f73f47 >> >> It looks like a compiler problem related to thread local storage >> (variable "current"). > Ugh. > >> I recently got several bug reports from a Windows user and included >> patches to fix them in >> my personal tree http://repo.or.cz/w/qemu/ar7.git. The binaries on >> qemu.weilnetz.de >> are based on that tree. > Does something like > > CoroutineWin32 *from = DO_UPCAST(CoroutineWin32, base, current); > > also work? Then we can just remove from_. > > Paolo
Yes, that works, too. It also fixes the problem with the assertion (tested with Wine). No, we cannot remove from_, because the same interface is also used for Linux and other hosts which don't have a 'current' variable. Or we would have to call qemu_coroutine_self() to get the current coroutine. Stefan