diff options
author | Erik Faye-Lund <kusmabite@gmail.com> | 2010-11-04 02:35:13 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-11-04 16:53:50 -0700 |
commit | 52de4db57977175c5ad1d6c3922e772d6de08496 (patch) | |
tree | 81411c6bb7a805ced13cbaf8580992023b6d1e5e /compat/mingw.h | |
parent | bb34c5aabe9f8d86a40d5ab8518fc78602264179 (diff) | |
download | git-52de4db57977175c5ad1d6c3922e772d6de08496.tar.gz |
mingw: use real pid
The Windows port have so far been using process handles in place
of PID. However, this is not work consistent with what getpid
returns.
PIDs are system-global identifiers, but process handles are local
to a process. Using PIDs instead of process handles allows, for
instance, a user to kill a hung process with the Task Manager,
something that would have been impossible with process handles.
Change the code to use the real PID, and use OpenProcess to get a
process-handle. Store the PID and the process handle in a linked
list protected by a critical section, so we can safely close the
process handle later.
Linked list code written by Pat Thoyts.
Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'compat/mingw.h')
-rw-r--r-- | compat/mingw.h | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/compat/mingw.h b/compat/mingw.h index a5bde82b9a..7c4eeea38c 100644 --- a/compat/mingw.h +++ b/compat/mingw.h @@ -140,13 +140,7 @@ static inline int mingw_unlink(const char *pathname) } #define unlink mingw_unlink -static inline pid_t waitpid(pid_t pid, int *status, unsigned options) -{ - if (options == 0) - return _cwait(status, pid, 0); - errno = EINVAL; - return -1; -} +pid_t waitpid(pid_t pid, int *status, unsigned options); #ifndef NO_OPENSSL #include <openssl/ssl.h> @@ -321,11 +315,13 @@ void free_environ(char **env); static int mingw_main(); \ int main(int argc, const char **argv) \ { \ + extern CRITICAL_SECTION pinfo_cs; \ _fmode = _O_BINARY; \ _setmode(_fileno(stdin), _O_BINARY); \ _setmode(_fileno(stdout), _O_BINARY); \ _setmode(_fileno(stderr), _O_BINARY); \ argv[0] = xstrdup(_pgmptr); \ + InitializeCriticalSection(&pinfo_cs); \ return mingw_main(argc, argv); \ } \ static int mingw_main(c,v) |