Commit d3d14b40 authored by Eli Zaretskii's avatar Eli Zaretskii
Browse files

Improve and correct commentary to w32proc-related data and functions.

parent a5f74442
...@@ -1274,7 +1274,7 @@ child_setup (int in, int out, int err, char **new_argv, bool set_pgrp, ...@@ -1274,7 +1274,7 @@ child_setup (int in, int out, int err, char **new_argv, bool set_pgrp,
#ifdef WINDOWSNT #ifdef WINDOWSNT
prepare_standard_handles (in, out, err, handles); prepare_standard_handles (in, out, err, handles);
set_process_dir (SDATA (current_dir)); set_process_dir (SDATA (current_dir));
/* Spawn the child. (See ntproc.c:Spawnve). */ /* Spawn the child. (See w32proc.c:sys_spawnve). */
cpid = spawnve (_P_NOWAIT, new_argv[0], new_argv, env); cpid = spawnve (_P_NOWAIT, new_argv[0], new_argv, env);
reset_standard_handles (in, out, err, handles); reset_standard_handles (in, out, err, handles);
if (cpid == -1) if (cpid == -1)
......
...@@ -6085,7 +6085,8 @@ sys_pipe (int * phandles) ...@@ -6085,7 +6085,8 @@ sys_pipe (int * phandles)
} }
/* Function to do blocking read of one byte, needed to implement /* Function to do blocking read of one byte, needed to implement
select. It is only allowed on sockets and pipes. */ select. It is only allowed on communication ports, sockets, or
pipes. */
int int
_sys_read_ahead (int fd) _sys_read_ahead (int fd)
{ {
......
...@@ -68,17 +68,41 @@ enum { ...@@ -68,17 +68,41 @@ enum {
a socket, the process handle in pi is NULL. */ a socket, the process handle in pi is NULL. */
typedef struct _child_process typedef struct _child_process
{ {
int fd; /* File descriptor for sockets and serial port connections, and for
int pid; reading output from async subprocesses; otherwise -1. */
HANDLE char_avail; int fd;
HANDLE char_consumed; /* PID for subprocess, either async or not; otherwise -1. */
HANDLE thrd; int pid;
HWND hwnd; /* Handle to an event object that is signaled when a read operation
PROCESS_INFORMATION procinfo; is completed, either successfully (in which case there're indeed
volatile int status; "characters available") or not. Used by sys_select to wait for
char chr; output from subprocesses or socket/serial connections. */
OVERLAPPED ovl_read; HANDLE char_avail;
OVERLAPPED ovl_write; /* Handle to an event that is signaled to wake up the reader thread
and tell it to try reading more output from a subprocess. */
HANDLE char_consumed;
/* Handle to the reader thread to read output from a subprocess or a
socket or a comm port. */
HANDLE thrd;
/* Handle to the console window of a subprocess. Used to forcibly
terminate it by sys_kill. */
HWND hwnd;
/* Information about subprocess returned by CreateProcess. Includes
handles to the subprocess and its primary thread, and the
corresponding process ID and thread ID numbers. The PID is
mirrored by the 'pid' member above. The process handle is used
to wait on it. */
PROCESS_INFORMATION procinfo;
/* Status of subprocess/connection and of reading its output. For
values, see the enumeration above. */
volatile int status;
/* Holds a single character read by _sys_read_ahead, when a
subprocess has some output ready. */
char chr;
/* Used for async read operations on serial comm ports. */
OVERLAPPED ovl_read;
/* Used for async write operations on serial comm ports. */
OVERLAPPED ovl_write;
} child_process; } child_process;
#define MAXDESC FD_SETSIZE #define MAXDESC FD_SETSIZE
......
...@@ -1857,7 +1857,7 @@ sys_select (int nfds, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds, ...@@ -1857,7 +1857,7 @@ sys_select (int nfds, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds,
} }
else else
{ {
/* Child process and socket input */ /* Child process and socket/comm port input. */
cp = fd_info[i].cp; cp = fd_info[i].cp;
if (cp) if (cp)
{ {
...@@ -1870,7 +1870,7 @@ sys_select (int nfds, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds, ...@@ -1870,7 +1870,7 @@ sys_select (int nfds, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds,
/* Wake up the reader thread for this process */ /* Wake up the reader thread for this process */
cp->status = STATUS_READ_READY; cp->status = STATUS_READ_READY;
if (!SetEvent (cp->char_consumed)) if (!SetEvent (cp->char_consumed))
DebPrint (("nt_select.SetEvent failed with " DebPrint (("sys_select.SetEvent failed with "
"%lu for fd %ld\n", GetLastError (), i)); "%lu for fd %ld\n", GetLastError (), i));
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment