* bug#49496: 28.0.50; process-tests/fd-setsize-no-crash/make-network-process hangs on Cygwin
@ 2021-07-09 18:01 Ken Brown
2021-07-09 18:18 ` Eli Zaretskii
0 siblings, 1 reply; 3+ messages in thread
From: Ken Brown @ 2021-07-09 18:01 UTC (permalink / raw)
To: 49496
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
^ permalink raw reply related [flat|nested] 3+ messages in thread
* bug#49496: 28.0.50; process-tests/fd-setsize-no-crash/make-network-process hangs on Cygwin
2021-07-09 18:01 bug#49496: 28.0.50; process-tests/fd-setsize-no-crash/make-network-process hangs on Cygwin Ken Brown
@ 2021-07-09 18:18 ` Eli Zaretskii
2021-07-09 20:42 ` Ken Brown
0 siblings, 1 reply; 3+ messages in thread
From: Eli Zaretskii @ 2021-07-09 18:18 UTC (permalink / raw)
To: Ken Brown; +Cc: 49496
> From: Ken Brown <kbrown@cornell.edu>
> Date: Fri, 9 Jul 2021 14:01:33 -0400
>
> 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?
Yes, OK. But please explain there in a comment why we skip that, with
a reference to this bug.
(FWIW, I consider the process-tests suite to be not useful enough, in
that it many times tests behavior that is only guaranteed to happen on
GNU/Linux, and is not really required, nor should be expected, in
portable Lisp programs. So it doesn't surprise me that some of the
tests fail on some systems.)
^ permalink raw reply [flat|nested] 3+ messages in thread
* bug#49496: 28.0.50; process-tests/fd-setsize-no-crash/make-network-process hangs on Cygwin
2021-07-09 18:18 ` Eli Zaretskii
@ 2021-07-09 20:42 ` Ken Brown
0 siblings, 0 replies; 3+ messages in thread
From: Ken Brown @ 2021-07-09 20:42 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 49496-done
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.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-07-09 20:42 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-07-09 18:01 bug#49496: 28.0.50; process-tests/fd-setsize-no-crash/make-network-process hangs on Cygwin Ken Brown
2021-07-09 18:18 ` Eli Zaretskii
2021-07-09 20:42 ` Ken Brown
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).