From 099fe236d5e37e8477d17fae09f398bb49eebc13 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Juha=20Riihim=C3=A4ki?= Date: Thu, 3 Dec 2009 15:56:03 +0200 Subject: [PATCH] fix pidfile option to work in WIN32 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Explicit read/write locking pidfile under WIN32 is bit extreme nobody get the chance to read the pidfile. Convert to a write-only lock. Also, creating pidfile was disabled along with daemonize under WIN32. Enable it, but do not enable daemon support which doesn't exist under WIN32 atm. From: Juha Riihimäki Signed-off-by: Juha Riihimäki Signed-off-by: Riku Voipio Signed-off-by: Aurelien Jarno --- osdep.c | 13 ++----------- vl.c | 4 +++- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/osdep.c b/osdep.c index 9949606bb5..e4836e720c 100644 --- a/osdep.c +++ b/osdep.c @@ -133,25 +133,16 @@ int qemu_create_pidfile(const char *filename) return -1; #else HANDLE file; - DWORD flags; OVERLAPPED overlap; BOOL ret; + memset(&overlap, 0, sizeof(overlap)); - /* Open for writing with no sharing. */ - file = CreateFile(filename, GENERIC_WRITE, 0, NULL, + file = CreateFile(filename, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (file == INVALID_HANDLE_VALUE) return -1; - flags = LOCKFILE_EXCLUSIVE_LOCK | LOCKFILE_FAIL_IMMEDIATELY; - overlap.hEvent = 0; - /* Lock 1 byte. */ - ret = LockFileEx(file, flags, 0, 0, 1, &overlap); - if (ret == 0) - return -1; - - /* Write PID to file. */ len = snprintf(buffer, sizeof(buffer), "%ld\n", (long)getpid()); ret = WriteFileEx(file, (LPCVOID)buffer, (DWORD)len, &overlap, NULL); diff --git a/vl.c b/vl.c index 8be3648f4f..e606903465 100644 --- a/vl.c +++ b/vl.c @@ -5761,16 +5761,18 @@ int main(int argc, char **argv, char **envp) signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); } +#endif if (pid_file && qemu_create_pidfile(pid_file) != 0) { +#ifndef _WIN32 if (daemonize) { uint8_t status = 1; write(fds[1], &status, 1); } else +#endif fprintf(stderr, "Could not acquire pid file: %s\n", strerror(errno)); exit(1); } -#endif if (kvm_enabled()) { int ret; -- 2.11.0