]> code.delx.au - offlineimap/commitdiff
Undo 'Fix Maildir race' patch
authorJohn Goerzen <jgoerzen@complete.org>
Fri, 19 Oct 2007 19:29:34 +0000 (20:29 +0100)
committerJohn Goerzen <jgoerzen@complete.org>
Fri, 19 Oct 2007 19:29:34 +0000 (20:29 +0100)
This was causing OfflineIMAP to hang

offlineimap/folder/Maildir.py

index c5d509282c18ece03fe560391245e0ababbebf83..56a63e4306a1217469ec8bc232432df04d50597f 100644 (file)
@@ -158,8 +158,7 @@ class MaildirFolder(BaseFolder):
         # Otherwise, save the message in tmp/ and then call savemessageflags()
         # to give it a permanent home.
         tmpdir = os.path.join(self.getfullname(), 'tmp')
-        file = fd = None
-        messagename = tmpmessaename = None
+        messagename = None
         attempts = 0
         while 1:
             if attempts > 15:
@@ -172,24 +171,19 @@ class MaildirFolder(BaseFolder):
                            socket.gethostname(),
                            uid,
                            md5.new(self.getvisiblename()).hexdigest())
-            tmpmessagename = messagename.split(',')[0]
-            try:
-                fd = os.open(os.path.join(tmpdir, tmpmessagename),
-                        os.O_WRONLY + os.O_CREAT + os.O_EXCL)
-                file = os.fdopen(fd, 'w')
-                ui.debug('maildir', 'savemessage: using temporary name %s' % tmpmessagename)
-            except OSError, e:
-                if e.errno == 17:
-                    time.sleep(2)
-                    attempts += 1
-                    continue
-                raise
-
+            if os.path.exists(os.path.join(tmpdir, messagename)):
+                time.sleep(2)
+                attempts += 1
+            else:
+                break
+        tmpmessagename = messagename.split(',')[0]
+        ui.debug('maildir', 'savemessage: using temporary name %s' % tmpmessagename)
+        file = open(os.path.join(tmpdir, tmpmessagename), "wt")
         file.write(content)
 
         # Make sure the data hits the disk
         file.flush()
-        os.fsync(fd)
+        os.fsync(file.fileno())
 
         file.close()
         if rtime != None: