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;