]> granicus.if.org Git - neomutt/commitdiff
handle sigint within socket operations (#411)
authorEdward Betts <edward@4angle.com>
Fri, 24 Feb 2017 16:37:16 +0000 (16:37 +0000)
committerRichard Russon <rich@flatcap.org>
Fri, 24 Feb 2017 16:37:16 +0000 (16:37 +0000)
When trying to use mutt with non-SSL IMAP it intermittently throws
'Error talking to localhost (Interrupted system call)' and closes
the mailbox.

Closes #407
Closes #408
Closes #411

mutt_socket.c

index 5995f7c158ccd005edc57ce7abc0271190f9957b..2b2af7f2633c1e2cae819b507db2d1bfcaba13bf 100644 (file)
@@ -402,14 +402,18 @@ int raw_socket_read (CONNECTION* conn, char* buf, size_t len)
     mutt_error (_("Error talking to %s (%s)"), conn->account.host,
                strerror (errno));
     mutt_sleep (2);
-  } else if (errno == EINTR) {
-    rc = -1;
-    mutt_error (_("Error talking to %s (%s)"), conn->account.host,
-               strerror (errno));
-    mutt_sleep (2);
-   }
+    SigInt = 0;
+  }
   mutt_allow_interrupt (0);
 
+  if (SigInt)
+  {
+    mutt_error (_("Connection to %s has been aborted"), conn->account.host);
+    mutt_sleep (2);
+    SigInt = 0;
+    rc = -1;
+  }
+
   return rc;
 }
 
@@ -423,14 +427,18 @@ int raw_socket_write (CONNECTION* conn, const char* buf, size_t count)
     mutt_error (_("Error talking to %s (%s)"), conn->account.host,
                strerror (errno));
     mutt_sleep (2);
-  } else if (errno == EINTR) {
-    rc = -1;
-    mutt_error (_("Error talking to %s (%s)"), conn->account.host,
-               strerror (errno));
-    mutt_sleep (2);
+    SigInt = 0;
   }
   mutt_allow_interrupt (0);
 
+  if (SigInt)
+  {
+    mutt_error (_("Connection to %s has been aborted"), conn->account.host);
+    mutt_sleep (2);
+    SigInt = 0;
+    rc = -1;
+  }
+
   return rc;
 }