X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=os-win32.c;h=b6652af7f3fb596217828d7786fea6a6005d774f;hb=e0e8384dd471376c3f815c3070f161480a28cc90;hp=dd46bf459db4a150d2866468fa2c9bc1adb8a885;hpb=e945fb76271eb4c8ceed6bff417a0b98744e1af3;p=qemu.git diff --git a/os-win32.c b/os-win32.c index dd46bf459..b6652af7f 100644 --- a/os-win32.c +++ b/os-win32.c @@ -140,7 +140,9 @@ void os_host_main_loop_wait(int *timeout) int err; WaitObjects *w = &wait_objects; + qemu_mutex_unlock_iothread(); ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout); + qemu_mutex_lock_iothread(); if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) { if (w->func[ret - WAIT_OBJECT_0]) w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]); @@ -180,7 +182,7 @@ void os_setup_early_signal_handling(void) /* Note: cpu_interrupt() is currently not SMP safe, so we force QEMU to run on a single CPU */ HANDLE h; - DWORD mask, smask; + DWORD_PTR mask, smask; int i; SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE); @@ -221,6 +223,12 @@ char *os_find_datadir(const char *argv0) return NULL; } +void os_set_line_buffering(void) +{ + setbuf(stdout, NULL); + setbuf(stderr, NULL); +} + /* * Parse OS specific command line options. * return 0 if option handled, -1 otherwise @@ -234,3 +242,32 @@ void os_pidfile_error(void) { fprintf(stderr, "Could not acquire pid file: %s\n", strerror(errno)); } + +int qemu_create_pidfile(const char *filename) +{ + char buffer[128]; + int len; + HANDLE file; + OVERLAPPED overlap; + BOOL ret; + memset(&overlap, 0, sizeof(overlap)); + + file = CreateFile(filename, GENERIC_WRITE, FILE_SHARE_READ, NULL, + OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + + if (file == INVALID_HANDLE_VALUE) { + return -1; + } + len = snprintf(buffer, sizeof(buffer), FMT_pid "\n", getpid()); + ret = WriteFileEx(file, (LPCVOID)buffer, (DWORD)len, + &overlap, NULL); + if (ret == 0) { + return -1; + } + return 0; +} + +int qemu_get_thread_id(void) +{ + return GetCurrentThreadId(); +}