1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-08 15:35:02 +00:00

(_sys_read_ahead): Handle sleep here.

(sys_read): Not here.
(init_ntproc): Initialize can_run_dos_process, dos_process_running.
This commit is contained in:
Karl Heuer 1996-05-17 21:45:30 +00:00
parent c98e68fc13
commit f75543492d

View File

@ -1755,6 +1755,9 @@ sys_pipe (int * phandles)
return rc;
}
/* From ntproc.c */
extern Lisp_Object Vwin32_pipe_read_delay;
/* Function to do blocking read of one byte, needed to implement
select. It is only allowed on sockets and pipes. */
int
@ -1781,8 +1784,30 @@ _sys_read_ahead (int fd)
cp->status = STATUS_READ_IN_PROGRESS;
if (fd_info[fd].flags & FILE_PIPE)
/* Use read to get CRLF translation */
rc = _read (fd, &cp->chr, sizeof (char));
{
/* Use read to get CRLF translation */
rc = _read (fd, &cp->chr, sizeof (char));
/* Give subprocess time to buffer some more output for us before
reporting that input is available; we need this because Win95
connects DOS programs to pipes by making the pipe appear to be
the normal console stdout - as a result most DOS programs will
write to stdout without buffering, ie. one character at a
time. Even some Win32 programs do this - "dir" in a command
shell on NT is very slow if we don't do this. */
if (rc > 0)
{
int wait = XINT (Vwin32_pipe_read_delay);
if (wait > 0)
Sleep (wait);
else if (wait < 0)
while (++wait <= 0)
/* Yield remainder of our time slice, effectively giving a
temporary priority boost to the child process. */
Sleep (0);
}
}
#ifdef HAVE_SOCKETS
else if (fd_info[fd].flags & FILE_SOCKET)
rc = pfn_recv (SOCK_HANDLE (fd), &cp->chr, sizeof (char), 0);
@ -1851,8 +1876,6 @@ sys_read (int fd, char * buffer, unsigned int count)
ResetEvent (cp->char_avail);
case STATUS_READ_ACKNOWLEDGED:
/* Give process time to buffer some more output for us */
Sleep (50);
break;
default:
@ -1958,6 +1981,9 @@ term_ntproc ()
#endif
}
extern BOOL can_run_dos_process;
extern BOOL dos_process_running;
void
init_ntproc ()
{
@ -2025,6 +2051,10 @@ init_ntproc ()
fdopen (2, "w");
}
/* Only allow Emacs to run DOS programs on Win95. */
can_run_dos_process = (GetVersion () & 0x80000000);
dos_process_running = FALSE;
/* unfortunately, atexit depends on implementation of malloc */
/* atexit (term_ntproc); */
signal (SIGABRT, term_ntproc);