diff options
author | grothoff <grothoff@140774ce-b5e7-0310-ab8b-a85725594a96> | 2012-07-09 11:48:43 +0000 |
---|---|---|
committer | grothoff <grothoff@140774ce-b5e7-0310-ab8b-a85725594a96> | 2012-07-09 11:48:43 +0000 |
commit | 0a6e3ce1fe7706e2ff265b1b8bea2789167a8a11 (patch) | |
tree | a44e580f7686210b75c870f62fff47a0227ea233 /src/util/os_priority.c | |
parent | 5fed158fc9bbc40c753584b68503b6f07af33922 (diff) |
-reverting SVN 22558 (new insights...)
git-svn-id: https://gnunet.org/svn/gnunet@22568 140774ce-b5e7-0310-ab8b-a85725594a96
Diffstat (limited to 'src/util/os_priority.c')
-rw-r--r-- | src/util/os_priority.c | 58 |
1 files changed, 14 insertions, 44 deletions
diff --git a/src/util/os_priority.c b/src/util/os_priority.c index ca60f857e1..c9174dee99 100644 --- a/src/util/os_priority.c +++ b/src/util/os_priority.c @@ -961,10 +961,6 @@ start_process (int pipe_control, long lRet; HANDLE stdin_handle; HANDLE stdout_handle; - BOOL bresult; - DWORD error_code; - HANDLE stdih, stdoh, stdeh; - DWORD stdif, stdof, stdef; if (GNUNET_SYSERR == GNUNET_OS_check_helper_binary (filename)) return NULL; /* not executable */ @@ -1087,7 +1083,8 @@ start_process (int pipe_control, memset (&start, 0, sizeof (start)); start.cb = sizeof (start); - start.dwFlags |= STARTF_USESTDHANDLES; + if ((pipe_stdin != NULL) || (pipe_stdout != NULL)) + start.dwFlags |= STARTF_USESTDHANDLES; if (pipe_stdin != NULL) { @@ -1182,54 +1179,24 @@ start_process (int pipe_control, return NULL; } - /* Prevents our std handles from being inherited by the child */ - stdih = GetStdHandle (STD_INPUT_HANDLE); - stdoh = GetStdHandle (STD_OUTPUT_HANDLE); - stdeh = GetStdHandle (STD_ERROR_HANDLE); - if (stdih) + if (!CreateProcessW (wpath, wcmd, NULL, NULL, TRUE, + DETACHED_PROCESS | CREATE_SUSPENDED, env_block, NULL, &start, &proc)) { - GetHandleInformation (stdih, &stdif); - SetHandleInformation (stdih, HANDLE_FLAG_INHERIT, 0); - } - if (stdoh) - { - GetHandleInformation (stdoh, &stdof); - SetHandleInformation (stdoh, HANDLE_FLAG_INHERIT, 0); - } - if (stdeh) - { - GetHandleInformation (stdeh, &stdef); - SetHandleInformation (stdeh, HANDLE_FLAG_INHERIT, 0); - } - - bresult = CreateProcessW (wpath, wcmd, NULL, NULL, TRUE, - DETACHED_PROCESS | CREATE_SUSPENDED, env_block, NULL, &start, &proc); - error_code = GetLastError (); - - if (stdih) - SetHandleInformation (stdih, stdif, stdif); - if (stdoh) - SetHandleInformation (stdoh, stdof, stdof); - if (stdeh) - SetHandleInformation (stdeh, stdef, stdef); - - GNUNET_free (env_block); - GNUNET_free (cmd); - free (wpath); - free (wcmd); - - if (!bresult) - { - SetErrnoFromWinError (error_code); + SetErrnoFromWinError (GetLastError ()); LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "CreateProcess"); - if (NULL != control_pipe) GNUNET_DISK_file_close (control_pipe); if (NULL != lsocks) GNUNET_DISK_pipe_close (lsocks_pipe); + GNUNET_free (env_block); + GNUNET_free (cmd); + free (wpath); + free (wcmd); return NULL; } + GNUNET_free (env_block); + gnunet_proc = GNUNET_malloc (sizeof (struct GNUNET_OS_Process)); gnunet_proc->pid = proc.dwProcessId; gnunet_proc->handle = proc.hProcess; @@ -1239,6 +1206,9 @@ start_process (int pipe_control, ResumeThread (proc.hThread); CloseHandle (proc.hThread); + GNUNET_free (cmd); + free (wpath); + free (wcmd); if (lsocks == NULL || lsocks[0] == INVALID_SOCKET) return gnunet_proc; |