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>
This commit is contained in:
Juha Riihimäki 2009-12-03 15:56:03 +02:00 committed by Aurelien Jarno
parent 1e8b27ca85
commit 099fe236d5
2 changed files with 5 additions and 12 deletions

13
osdep.c
View file

@ -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);