]> git.eshelyaron.com Git - emacs.git/commitdiff
A better fix for process-tests on MS-Windows
authorEli Zaretskii <eliz@gnu.org>
Tue, 29 Dec 2020 19:30:59 +0000 (21:30 +0200)
committerEli Zaretskii <eliz@gnu.org>
Tue, 29 Dec 2020 19:30:59 +0000 (21:30 +0200)
* 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.

src/w32.c
test/src/process-tests.el

index 5ebae324c200b2d2328c361c3c6cb5f28dd21a4b..56c78a0d2294f3a5adb850157ecadc61d109a791 100644 (file)
--- a/src/w32.c
+++ b/src/w32.c
@@ -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;
        }
index 3272044afccd9732923e490a3b55a73e7ac579c8..aeb5b75021233865e148bd11942f48a4b5ef304f 100644 (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