site

(Pierre-Yves David)
2012-01-07: obsolete: improve locking when writing obsolete data

obsolete: improve locking when writing obsolete data

diff --git a/hgext/obsolete.py b/hgext/obsolete.py
--- a/hgext/obsolete.py
+++ b/hgext/obsolete.py
@@ -387,15 +387,19 @@ def reposetup(ui, repo):
         def _writeobsrels(self):
             """Write obsolete relation on disk"""
             # XXX handle lock
-            f = self.opener('obsolete-relations', 'w', atomictemp=True)
+            lock = self.wlock()
             try:
-                _obsserialise(self._obssubrels, f)
+                f = self.opener('obsolete-relations', 'w', atomictemp=True)
                 try:
-                    f.rename()
-                except AttributeError: # old version
+                    _obsserialise(self._obssubrels, f)
+                    try:
+                        f.rename()
+                    except AttributeError: # old version
+                        f.close()
+                finally:
                     f.close()
             finally:
-                f.close()
+                lock.release()
 
         ### local clone support