]> arthur.barton.de Git - bup.git/commitdiff
hlinkdb.py: clean up temp file more carefully
authorRob Browning <rlb@defaultvalue.org>
Thu, 17 Jul 2014 17:47:43 +0000 (12:47 -0500)
committerRob Browning <rlb@defaultvalue.org>
Sat, 7 Feb 2015 17:00:42 +0000 (11:00 -0600)
Make sure to always close the temp file, and if something goes wrong
while preparing the save, make sure to delete it and remove it from
consideration by commit.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
lib/bup/hlinkdb.py

index 3a53b4059952af61828198ed5e783cf1da818ad8..5edb0a627961bd9ca50da249ec214fc791d562fd 100644 (file)
@@ -40,20 +40,21 @@ class HLinkDB:
             (dir, name) = os.path.split(self._filename)
             (ffd, self._tmpname) = tempfile.mkstemp('.tmp', name, dir)
             try:
-                f = os.fdopen(ffd, 'wb', 65536)
-            except:
-                os.close(ffd)
-                raise
-            try:
-                cPickle.dump(self._node_paths, f, 2)
+                try:
+                    f = os.fdopen(ffd, 'wb', 65536)
+                except:
+                    os.close(ffd)
+                    raise
+                try:
+                    cPickle.dump(self._node_paths, f, 2)
+                finally:
+                    f.close()
+                    f = None
             except:
-                f.close()
-                os.unlink(self._tmpname)
+                tmpname = self._tmpname
                 self._tmpname = None
+                os.unlink(tmpname)
                 raise
-            else:
-                f.close()
-                f = None
         self._save_prepared = True
 
     def commit_save(self):