From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:47203) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RNQJL-0004q8-Su for qemu-devel@nongnu.org; Mon, 07 Nov 2011 09:36:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RNQJI-0006e9-3c for qemu-devel@nongnu.org; Mon, 07 Nov 2011 09:36:31 -0500 Received: from mel.act-europe.fr ([194.98.77.210]:49332) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RNQJH-0006e0-Vb for qemu-devel@nongnu.org; Mon, 07 Nov 2011 09:36:28 -0500 From: Fabien Chouteau Date: Mon, 7 Nov 2011 15:36:14 +0100 Message-Id: <1320676574-19251-1-git-send-email-chouteau@adacore.com> Subject: [Qemu-devel] [PATCH 1.0] Replace WriteFileEx with WriteFile in qemu_create_pidfile List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: blauwirbel@gmail.com, weil@mail.berlios.de, aliguori@us.ibm.com, jan.kiszka@siemens.com, pbonzini@redhat.com The function that writes pidfile for win32 uses WriteFileEx which is an asynchronous IO function. The arguments given to WriteFileEx are allocated on the stack and one of them is "in out". When the IO operation is actually executed the calling function has already returned, so the arguments are no longer allocated or allocated to another frame. Signed-off-by: Fabien Chouteau --- os-win32.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff --git a/os-win32.c b/os-win32.c index 7909401..8ad5fa1 100644 --- a/os-win32.c +++ b/os-win32.c @@ -130,14 +130,15 @@ int qemu_create_pidfile(const char *filename) memset(&overlap, 0, sizeof(overlap)); file = CreateFile(filename, GENERIC_WRITE, FILE_SHARE_READ, NULL, - OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (file == INVALID_HANDLE_VALUE) { return -1; } len = snprintf(buffer, sizeof(buffer), "%d\n", getpid()); - ret = WriteFileEx(file, (LPCVOID)buffer, (DWORD)len, - &overlap, NULL); + ret = WriteFile(file, (LPCVOID)buffer, (DWORD)len, + NULL, &overlap); + CloseHandle(file); if (ret == 0) { return -1; } -- 1.7.5.1