diff options
author | Noam Postavsky <npostavs@gmail.com> | 2019-05-06 19:55:17 -0400 |
---|---|---|
committer | Noam Postavsky <npostavs@gmail.com> | 2019-05-13 20:15:31 -0400 |
commit | 202ff53da267f9fa15f438e9c38603bbead6e890 (patch) | |
tree | 6af8ac7ab68b1e5e996aa4de544a67cfadce4060 /src | |
parent | 02bee7860f7e650ef13e00fe1a7f9a362e3eb001 (diff) | |
download | emacs-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.c | 11 |
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; |