]> git.cworth.org Git - sup/commitdiff
retry on EPIPE
authorwmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Wed, 3 Jan 2007 06:08:23 +0000 (06:08 +0000)
committerwmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Wed, 3 Jan 2007 06:08:23 +0000 (06:08 +0000)
git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@147 5c8cc53c-5e98-4d25-b20a-d8db53a31250

lib/sup/imap.rb

index 296a5d3b57783c85a9767497f7e1dc001e9f1d34..715a98e83215337bb0454c16eb2272645209e656 100644 (file)
@@ -149,6 +149,7 @@ class IMAP < Source
   end
 
   def get_imap_field id, field
+    retries = 0
     f = nil
     imap_id = @imap_ids[id] or raise SourceError, "Unknown message id #{id}. It is likely that messages have been deleted from this IMAP mailbox."
     begin
@@ -157,6 +158,12 @@ class IMAP < Source
       raise SourceError, "IMAP message mismatch: requested #{id}, got #{got_id}. It is likely the IMAP mailbox has been modified." unless got_id == id
     rescue Net::IMAP::Error => e
       raise SourceError, e.message
+    rescue Errno::EPIPE
+      if (retries += 1) <= 3
+        @imap = nil
+        connect
+        retry
+      end
     end
     raise SourceError, "null IMAP field '#{field}' for message with id #{id} imap id #{imap_id}" if f.nil?