aboutsummaryrefslogtreecommitdiff
path: root/osdep.c
diff options
context:
space:
mode:
authorJuha Riihimäki <juha.riihimaki@nokia.com>2009-12-03 15:56:03 +0200
committerAurelien Jarno <aurelien@aurel32.net>2009-12-18 23:23:56 +0100
commit099fe236d5e37e8477d17fae09f398bb49eebc13 (patch)
tree687d79961d8f49d98b642bf3b4b86dbfdb5f1e17 /osdep.c
parent1e8b27ca853d26e8854dc1a3e7ce88605e1673b9 (diff)
fix pidfile option to work in WIN32
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 <juha.riihimaki@nokia.com> Signed-off-by: Juha Riihimäki <juha.riihimaki@nokia.com> Signed-off-by: Riku Voipio <riku.voipio@nokia.com> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Diffstat (limited to 'osdep.c')
-rw-r--r--osdep.c13
1 files changed, 2 insertions, 11 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);