Blob Blame History Raw
diff -up mutt-1.5.18/mutt_socket.c.intr mutt-1.5.18/mutt_socket.c
--- mutt-1.5.18/mutt_socket.c.intr	2008-01-28 03:20:23.000000000 +0100
+++ mutt-1.5.18/mutt_socket.c	2008-05-22 16:49:04.000000000 +0200
@@ -75,10 +75,12 @@ int mutt_socket_close (CONNECTION* conn)
 {
   int rc = -1;
 
+  mutt_allow_interrupt (1);
   if (conn->fd < 0)
     dprint (1, (debugfile, "mutt_socket_close: Attempt to close closed connection.\n"));
   else
     rc = conn->conn_close (conn);
+  mutt_allow_interrupt (0);
 
   conn->fd = -1;
   conn->ssf = 0;
@@ -96,7 +98,9 @@ int mutt_socket_read (CONNECTION* conn, 
     return -1;
   }
 
+  mutt_allow_interrupt (1);
   rc = conn->conn_read (conn, buf, len);
+  mutt_allow_interrupt (0);
   /* EOF */
   if (rc == 0)
   {
@@ -123,14 +127,17 @@ int mutt_socket_write_d (CONNECTION *con
 
   if (len < 0)
     len = mutt_strlen (buf);
+  mutt_allow_interrupt (1);
   if ((rc = conn->conn_write (conn, buf, len)) < 0)
   {
+    mutt_allow_interrupt (0);
     dprint (1, (debugfile,
       "mutt_socket_write: error writing, closing socket\n"));
     mutt_socket_close (conn);
 
     return -1;
   }
+  mutt_allow_interrupt (0);
 
   if (rc < len)
   {
@@ -161,9 +168,11 @@ int mutt_socket_readchar (CONNECTION *co
 {
   if (conn->bufpos >= conn->available)
   {
-    if (conn->fd >= 0)
+    if (conn->fd >= 0) {
+      mutt_allow_interrupt (1);
       conn->available = conn->conn_read (conn, conn->inbuf, sizeof (conn->inbuf));
-    else
+      mutt_allow_interrupt (0);
+    } else
     {
       dprint (1, (debugfile, "mutt_socket_readchar: attempt to read from closed connection.\n"));
       return -1;