tor_terminate_process(pid_t pid)
{
#ifdef MS_WINDOWS
- DWORD pid_win = pid;
- DWORD err;
HANDLE handle;
/* If the signal is outside of what GenerateConsoleCtrlEvent can use,
attempt to open and terminate the process. */
handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
- if (handle == NULL)
+ if (!handle)
return -1;
- if (TerminateProcess(handle, sig) == 0)
+ if (!TerminateProcess(handle, 0))
return -1;
else
return 0;
-#else /* *nix */
+#else /* Unix */
return kill(pid, SIGTERM);
#endif
}
/* kill the old obfsproxy process */
tor_terminate_process(mp->pid);
mp->pid = 0;
- fclose(mp->stdout);
+ fclose(mp->_stdout);
/* destroy all its old transports. we no longer use them. */
SMARTLIST_FOREACH_BEGIN(mp->transports, const char *, t_name) {
free_execve_args(envp);
/* Set stdout/stderr pipes to be non-blocking */
- fcntl(stdout_pipe, F_SETFL, O_NONBLOCK);
+#ifdef _WIN32
+ {
+ u_long nonblocking = 1;
+ ioctlsocket(stdout_pipe, FIONBIO, &nonblocking);
+ }
+#else
+ fcntl(stdout_pipe, F_SETFL, O_NONBLOCK);
+#endif
+
/* Open the buffered IO streams */
stdout_read = fdopen(stdout_pipe, "r");
log_info(LD_CONFIG, "Managed proxy has spawned at PID %d.", pid);
mp->conf_state = PT_PROTO_LAUNCHED;
- mp->stdout = stdout_read;
+ mp->_stdout = stdout_read;
mp->pid = pid;
return 0;
tor_assert(mp->conf_state != PT_PROTO_INFANT);
while (1) {
- r = get_string_from_pipe(mp->stdout, stdout_buf,
+ r = get_string_from_pipe(mp->_stdout, stdout_buf,
sizeof(stdout_buf) - 1);
if (r == IO_STREAM_OKAY) { /* got a line; handle it! */
smartlist_remove(managed_proxy_list, mp);
/* close its stdout stream */
- if (mp->stdout)
- fclose(mp->stdout);
+ if (mp->_stdout)
+ fclose(mp->_stdout);
/* free the argv */
free_execve_args(mp->argv);
int is_server; /* is it a server proxy? */
- FILE *stdout; /* a stream to its stdout
+ FILE *_stdout; /* a stream to its stdout
(closed in managed_proxy_destroy()) */
int pid; /* The Process ID this managed proxy is using. */