Am 29.12.2011 18:29, schrieb Bogdan Harjoc:
Git commit 8d3bc51 crashes on win32 on startup because
qemu_tcg_init_vcpu calls:
qemu_thread_create(th, qemu_tcg_cpu_thread_fn, ...
...
qemu_thread_get_handle(th)
which locks th->data->cs, a CRITICAL_SECTION which is initialized only
in the thread_fn, so it finds garbage.
Attached patch initializes it before calling _beginthreadex.
GDB/windbg probably start newly created threads sooner, because this
doesn't happen under a debugger.
With the patch below it boots until it crashes somewhere while
attaching disks (-hda raw_img).
"bt" in gdb only returns "#0 0x00000000 in ??" and generate-core-file
didn't work.
Cheers,
diff -du qemu-8d3bc51\qemu-thread-win32.c
qemu-8d3bc51-new\qemu-thread-win32.c
--- qemu-8d3bc51\qemu-thread-win32.c Tue Dec 27 17:28:58 2011
+++ qemu-8d3bc51-new\qemu-thread-win32.c Thu Dec 29 18:59:50 2011
@@ -215,8 +215,6 @@
if (data->mode == QEMU_THREAD_DETACHED) {
g_free(data);
data = NULL;
- } else {
- InitializeCriticalSection(&data->cs);
}
TlsSetValue(qemu_thread_tls_index, data);
qemu_thread_exit(start_routine(thread_arg));
@@ -287,6 +285,10 @@
data->arg = arg;
data->mode = mode;
data->exited = false;
+
+ if (data->mode != QEMU_THREAD_DETACHED) {
+ InitializeCriticalSection(&data->cs);
+ }
hThread = (HANDLE) _beginthreadex(NULL, 0, win32_start_routine,
data, 0, &thread->tid);
Tested-by: Stefan Weil <s...@weilnetz.de>
Hi Bogdan,
I can confirm that your patch fixes a crash which otherwise makes
QEMU unusable on Windows hosts.
Could you please sign your patch with a Signed-off-by line including
your name and e-mail address (similar to my Tested-by above)?
We need this before we can commit your patch to QEMU master.
See http://wiki.qemu.org/Contribute/SubmitAPatch for more information.
Please contact me if you need more information.
Regards,
Stefan