git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 06/14] mingw: use real pid

From
Erik Faye-Lund <kusmabite@googlemail.com>
Date
Jan 15, 2010, 21:30 UTC
Message-ID
<1263591033-4992-7-git-send-email-kusmabite@gmail.com>
In-Reply-To
<1263591033-4992-1-git-send-email-kusmabite@gmail.com>

The Windows port so far used process handles as PID. However, this does not work consistently with getpid.

Change the code to use the real PID, and use OpenProcess to get a process-handle.

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
---
 compat/mingw.c |    2 +-
 compat/mingw.h |   35 +++++++++++++++++++++++++++++++----
 2 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/compat/mingw.c b/compat/mingw.c
index 54be905..ce4f829 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -729,7 +729,7 @@ static pid_t mingw_spawnve(const char *cmd, const char **argv, char **env,
 		return -1;
 	}
 	CloseHandle(pi.hThread);
-	return (pid_t)pi.hProcess;
+	return (pid_t)pi.dwProcessId;
 }
 
 pid_t mingw_spawnvpe(const char *cmd, const char **argv, char **env)
diff --git a/compat/mingw.h b/compat/mingw.h
index 3005472..ff4a76b 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -137,14 +137,41 @@ static inline int mingw_unlink(const char *pathname)
 #define WNOHANG 1
 static inline int waitpid(pid_t pid, int *status, unsigned options)
 {
-	if (pid > 0 && options & WNOHANG) {
-		if (WAIT_OBJECT_0 != WaitForSingleObject((HANDLE)pid, 0))
+	HANDLE h;
+
+	if (pid <= 0) {
+		errno = EINVAL;
+		return -1;
+	}
+
+	h = OpenProcess(SYNCHRONIZE | PROCESS_QUERY_INFORMATION, FALSE, pid);
+	if (!h) {
+		errno = ECHILD;
+		return -1;
+	}
+
+	if (options & WNOHANG) {
+		if (WaitForSingleObject(h, 0) != WAIT_OBJECT_0) {
+			CloseHandle(h);
 			return 0;
+		}
 		options &= ~WNOHANG;
 	}
 
-	if (options == 0)
-		return _cwait(status, pid, 0);
+	if (options == 0) {
+		if (WaitForSingleObject(h, INFINITE) != WAIT_OBJECT_0) {
+			CloseHandle(h);
+			return 0;
+		}
+
+		if (status)
+			GetExitCodeProcess(h, (LPDWORD)status);
+
+		CloseHandle(h);
+		return pid;
+	}
+	CloseHandle(h);
+
 	errno = EINVAL;
 	return -1;
 }
-- 
1.6.6.211.g26720
Previous: Erik Faye-LundNext: Johannes Sixt
Message 12 of 49 in “daemon-win32”
  1. 00/14 daemon-win32Erik Faye-Lund, Jan 15, 2010
  2. 01/14 mingw: add network-wrappers for daemonErik Faye-Lund, Jan 15, 2010
  3. 02/14 mingw: implement syslogErik Faye-Lund, Jan 15, 2010
  4. Janos LaubeJan 15, 2010
  5. Erik Faye-LundJan 15, 2010
  6. Janos LaubeJan 15, 2010
  7. 03/14 compat: add inet_pton and inet_ntop prototypesErik Faye-Lund, Jan 15, 2010
  8. 04/14 inet_ntop: fix a couple of old-style declsErik Faye-Lund, Jan 15, 2010
  9. 05/14 mingw: support waitpid with pid > 0 and WNOHANGErik Faye-Lund, Jan 15, 2010
  10. Johannes SixtJan 15, 2010
  11. Erik Faye-LundJan 16, 2010
  12. 06/14 mingw: use real pidErik Faye-Lund, Jan 15, 2010
  13. Johannes SixtJan 15, 2010
  14. Erik Faye-LundJan 15, 2010
  15. Johannes SixtJan 16, 2010
  16. Erik Faye-LundJan 16, 2010
  17. Erik Faye-LundJan 18, 2010
  18. Johannes SixtJan 19, 2010
  19. Erik Faye-LundJan 19, 2010
  20. 07/14 mingw: add kill emulationErik Faye-Lund, Jan 15, 2010
  21. Johannes SixtJan 15, 2010
  22. Erik Faye-LundJan 16, 2010
  23. 08/14 daemon: use explicit file descriptorErik Faye-Lund, Jan 15, 2010
  24. Johannes SixtJan 15, 2010
  25. Erik Faye-LundJan 16, 2010
  26. 09/14 daemon: use run-command api for async servingErik Faye-Lund, Jan 15, 2010
  27. Johannes SixtJan 15, 2010
  28. 10/14 daemon: use full buffered mode for stderrErik Faye-Lund, Jan 15, 2010
  29. 11/14 mingw: compile git-daemonErik Faye-Lund, Jan 15, 2010
  30. 12/14 Improve the mingw getaddrinfo stub to handle more use casesErik Faye-Lund, Jan 15, 2010
  31. 13/14 daemon: use select() instead of poll()Erik Faye-Lund, Jan 15, 2010
  32. Johannes SixtJan 15, 2010
  33. Erik Faye-LundJan 15, 2010
  34. Erik Faye-LundJan 15, 2010
  35. Johannes SixtJan 16, 2010
  36. Erik Faye-LundJan 16, 2010
  37. Johannes SixtJan 16, 2010
  38. Erik Faye-LundJan 16, 2010
  39. Andreas SchwabJan 16, 2010
  40. Erik Faye-LundJan 16, 2010
  41. Johannes SixtJan 16, 2010
  42. Erik Faye-LundJan 16, 2010
  43. Johannes SixtJan 16, 2010
  44. Erik Faye-LundJan 16, 2010
  45. Johannes SixtJan 16, 2010
  46. Erik Faye-LundJan 16, 2010
  47. 14/14 daemon: report connection from root-processErik Faye-Lund, Jan 15, 2010
  48. Johannes SixtJan 15, 2010
  49. Erik Faye-LundJan 15, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.