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.
This commit is contained in:
Noam Postavsky 2019-05-06 19:55:17 -04:00
parent 02bee7860f
commit 202ff53da2

View file

@ -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;