]> git.eshelyaron.com Git - emacs.git/commitdiff
Handle GNUTLS_E_AGAIN in emacs_gnutls_read (Bug#34341)
authorNoam Postavsky <npostavs@gmail.com>
Mon, 6 May 2019 23:55:17 +0000 (19:55 -0400)
committerNoam Postavsky <npostavs@gmail.com>
Tue, 14 May 2019 00:15:31 +0000 (20:15 -0400)
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.

src/gnutls.c

index 3c16b6c9c31fb65ac3a694cfdb0580e4229d5437..b724c3592d004b788efd17a794eb786b86c25394 100644 (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;