summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNoam Postavsky <npostavs@gmail.com>2019-05-06 19:55:17 -0400
committerNoam Postavsky <npostavs@gmail.com>2019-05-13 20:15:31 -0400
commit202ff53da267f9fa15f438e9c38603bbead6e890 (patch)
tree6af8ac7ab68b1e5e996aa4de544a67cfadce4060 /src
parent02bee7860f7e650ef13e00fe1a7f9a362e3eb001 (diff)
downloademacs-202ff53da267f9fa15f438e9c38603bbead6e890.tar.gz
Handle GNUTLS_E_AGAIN in emacs_gnutls_read (Bug#34341)
Don't merge to master, this has already been fixed there by 2019-01-15 "Fix unlikely races with GnuTLS, datagrams". * src/gnutls.c (emacs_gnutls_read): Similar to emacs_gnutls_write, when gnutls_record_recv returns GNUTLS_E_AGAIN set errno to EGAIN.
Diffstat (limited to 'src')
-rw-r--r--src/gnutls.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/gnutls.c b/src/gnutls.c
index 3c16b6c9c31..b724c3592d0 100644
--- a/src/gnutls.c
+++ b/src/gnutls.c
@@ -753,8 +753,15 @@ emacs_gnutls_read (struct Lisp_Process *proc, char *buf, ptrdiff_t nbyte)
/* The peer closed the connection. */
return 0;
else if (emacs_gnutls_handle_error (state, rtnval))
- /* non-fatal error */
- return -1;
+ {
+ /* If we get GNUTLS_E_AGAIN, then set errno appropriately so that
+ wait_reading_process_output retries the correct way instead of
+ erroring out. */
+ if (rtnval == GNUTLS_E_AGAIN)
+ errno = EAGAIN;
+ /* non-fatal error */
+ return -1;
+ }
else {
/* a fatal error occurred */
return 0;