A better fix for process-tests on MS-Windows

* src/w32.c (pipe2): When forcibly closing pipe handles due to
overflow of FD_SETSIZE, set the handles to -1, to avoid assertion
violations in emacs_close.

* test/src/process-tests.el (process-tests/fd-setsize-no-crash):
No need to skip this test anymore.
This commit is contained in:
Eli Zaretskii 2020-12-29 21:30:59 +02:00
parent 0326cddc7b
commit baac3562a6
2 changed files with 8 additions and 2 deletions

View file

@ -8667,6 +8667,11 @@ pipe2 (int * phandles, int pipe2_flags)
{
_close (phandles[0]);
_close (phandles[1]);
/* Since we close the handles, set them to -1, so as to
avoid an assertion violation if the caller then tries to
close the handle again (emacs_close will abort otherwise
if errno is EBADF). */
phandles[0] = phandles[1] = -1;
errno = EMFILE;
rc = -1;
}

View file

@ -389,11 +389,12 @@ See Bug#30460."
(ert-deftest process-tests/fd-setsize-no-crash ()
"Check that Emacs doesn't crash when trying to use more than
FD_SETSIZE file descriptors (Bug#24325)."
(skip-unless (not (eq system-type 'windows-nt)))
(with-timeout (60)
(let ((sleep (executable-find "sleep"))
;; FD_SETSIZE is typically 1024 on Unix-like systems.
(fd-setsize 1024)
;; On MS-Windows we artificially limit FD_SETSIZE to 64,
;; see the commentary in w32proc.c.
(fd-setsize (if (eq system-type 'windows-nt) 64 1024))
;; `make-process' allocates at least four file descriptors per process
;; when using the pipe communication method. However, it closes two of
;; them in the parent process, so we end up with only two new