emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#49496: closed (28.0.50; process-tests/fd-setsize-no-crash/make-netwo


From: GNU bug Tracking System
Subject: bug#49496: closed (28.0.50; process-tests/fd-setsize-no-crash/make-network-process hangs on Cygwin)
Date: Fri, 09 Jul 2021 20:44:02 +0000

Your message dated Fri, 9 Jul 2021 16:42:36 -0400
with message-id <c43faca7-ebf7-118e-25be-d4fc09d02807@cornell.edu>
and subject line Re: bug#49496: 28.0.50; 
process-tests/fd-setsize-no-crash/make-network-process hangs on Cygwin
has caused the debbugs.gnu.org bug report #49496,
regarding 28.0.50; process-tests/fd-setsize-no-crash/make-network-process hangs 
on Cygwin
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs@gnu.org.)


-- 
49496: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=49496
GNU Bug Tracking System
Contact help-debbugs@gnu.org with problems
--- Begin Message --- Subject: 28.0.50; process-tests/fd-setsize-no-crash/make-network-process hangs on Cygwin Date: Fri, 9 Jul 2021 14:01:33 -0400 User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 The hang can actually be triggered by evaluating the following, extracted from the test in the subject:

(setq socket-name "/tmp/socktest/socket")
(delete-file socket-name)
(make-network-process :name "server"
                      :server 10
                      :buffer nil
                      :service socket-name
                      :family 'local
                      :coding 'no-conversion
                      :noquery t)
(make-network-process :name "client"
                      :service socket-name
                      :family 'local
                      :coding 'no-conversion
                      :noquery t)

The reason for the hang is that Cygwin does a blocking handshake in accept/connect to exchange credentials. This can hang in certain situations in which connect is called before a listening socket is ready to accept connections.

It is possible to work around this problem by disabling the credential exchange as in the following patch:

diff --git a/src/process.c b/src/process.c
index b8c3e4ecfb..01548c8ab5 100644
--- a/src/process.c
+++ b/src/process.c
@@ -3355,6 +3355,12 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos,
              xerrno = EMFILE;
              continue;
            }
+#ifdef CYGWIN
+         /* Avoid possible hang in connect/accept.  */
+         if (family == AF_LOCAL && p->socktype == SOCK_STREAM
+             && setsockopt (s, SOL_SOCKET, SO_PEERCRED, 0, 0) < 0)
+           report_file_error ("Cannot disable credential exchange", Qnil);
+#endif
        }
        if (p->is_non_blocking_client && ! (SOCK_NONBLOCK && socket_to_use < 0))

But this seems too drastic just to fix a potential problem that doesn't seem to occur in practice, but only in the contrived situation of process-tests/fd-setsize-no-crash/make-network-process. So my preference is to simply skip that test on Cygwin.

OK?

In GNU Emacs 28.0.50 (build 9, x86_64-pc-cygwin, GTK+ Version 3.22.28, cairo version 1.17.4)
 of 2021-07-09 built on moufang2
Repository revision: 68276f6d30bbdc09cc26fb49d7f0c3aa4bce35f2
Repository branch: master
Windowing system distributor 'The Cygwin/X Project', version 11.0.12011000
Configured using:
 'configure 'CFLAGS=-g -O0''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON
LCMS2 LIBOTF LIBXML2 M17N_FLT MODULES NOTIFY GFILENOTIFY PDUMPER PNG
RSVG SOUND THREADS TIFF TOOLKIT_SCROLL_BARS X11 XDBE XIM XPM GTK3 ZLIB



--- End Message ---
--- Begin Message --- Subject: Re: bug#49496: 28.0.50; process-tests/fd-setsize-no-crash/make-network-process hangs on Cygwin Date: Fri, 9 Jul 2021 16:42:36 -0400 User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0
On 7/9/2021 2:18 PM, Eli Zaretskii wrote:
Yes, OK.  But please explain there in a comment why we skip that, with
a reference to this bug.

Done.  Closing.


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]