D6860: remotefilelog: remove dead code for using flock() for locking

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

D6860: remotefilelog: remove dead code for using flock() for locking

martinvonz (Martin von Zweigbergk)
durin42 created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D6860

AFFECTED FILES
  hgext/remotefilelog/extutil.py

CHANGE DETAILS

diff --git a/hgext/remotefilelog/extutil.py b/hgext/remotefilelog/extutil.py
deleted file mode 100644
--- a/hgext/remotefilelog/extutil.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# extutil.py - useful utility methods for extensions
-#
-# Copyright 2016 Facebook
-#
-# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2 or any later version.
-
-from __future__ import absolute_import
-
-import contextlib
-import errno
-import os
-import time
-
-from mercurial import (
-    error,
-    lock as lockmod,
-    util,
-    vfs as vfsmod,
-)
-
-@contextlib.contextmanager
-def flock(lockpath, description, timeout=-1):
-    """A flock based lock object. Currently it is always non-blocking.
-
-    Note that since it is flock based, you can accidentally take it multiple
-    times within one process and the first one to be released will release all
-    of them. So the caller needs to be careful to not create more than one
-    instance per lock.
-    """
-
-    # best effort lightweight lock
-    try:
-        import fcntl
-        fcntl.flock
-    except ImportError:
-        # fallback to Mercurial lock
-        vfs = vfsmod.vfs(os.path.dirname(lockpath))
-        with lockmod.lock(vfs, os.path.basename(lockpath), timeout=timeout):
-            yield
-        return
-    # make sure lock file exists
-    util.makedirs(os.path.dirname(lockpath))
-    with open(lockpath, 'a'):
-        pass
-    lockfd = os.open(lockpath, os.O_RDONLY, 0o664)
-    start = time.time()
-    while True:
-        try:
-            fcntl.flock(lockfd, fcntl.LOCK_EX | fcntl.LOCK_NB)
-            break
-        except IOError as ex:
-            if ex.errno == errno.EAGAIN:
-                if timeout != -1 and time.time() - start > timeout:
-                    raise error.LockHeld(errno.EAGAIN, lockpath, description,
-                                         '')
-                else:
-                    time.sleep(0.05)
-                    continue
-            raise
-
-    try:
-        yield
-    finally:
-        fcntl.flock(lockfd, fcntl.LOCK_UN)
-        os.close(lockfd)



To: durin42, #hg-reviewers
Cc: mercurial-devel
_______________________________________________
Mercurial-devel mailing list
[hidden email]
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Reply | Threaded
Open this post in threaded view
|

D6860: remotefilelog: remove dead code for using flock() for locking

martinvonz (Martin von Zweigbergk)
Closed by commit rHG5316f9ff3e48: remotefilelog: remove dead code for using flock() for locking (authored by durin42).
This revision was automatically updated to reflect the committed changes.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D6860?vs=16566&id=16571

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D6860/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D6860

AFFECTED FILES
  hgext/remotefilelog/extutil.py

CHANGE DETAILS

diff --git a/hgext/remotefilelog/extutil.py b/hgext/remotefilelog/extutil.py
deleted file mode 100644
--- a/hgext/remotefilelog/extutil.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# extutil.py - useful utility methods for extensions
-#
-# Copyright 2016 Facebook
-#
-# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2 or any later version.
-
-from __future__ import absolute_import
-
-import contextlib
-import errno
-import os
-import time
-
-from mercurial import (
-    error,
-    lock as lockmod,
-    util,
-    vfs as vfsmod,
-)
-
-@contextlib.contextmanager
-def flock(lockpath, description, timeout=-1):
-    """A flock based lock object. Currently it is always non-blocking.
-
-    Note that since it is flock based, you can accidentally take it multiple
-    times within one process and the first one to be released will release all
-    of them. So the caller needs to be careful to not create more than one
-    instance per lock.
-    """
-
-    # best effort lightweight lock
-    try:
-        import fcntl
-        fcntl.flock
-    except ImportError:
-        # fallback to Mercurial lock
-        vfs = vfsmod.vfs(os.path.dirname(lockpath))
-        with lockmod.lock(vfs, os.path.basename(lockpath), timeout=timeout):
-            yield
-        return
-    # make sure lock file exists
-    util.makedirs(os.path.dirname(lockpath))
-    with open(lockpath, 'a'):
-        pass
-    lockfd = os.open(lockpath, os.O_RDONLY, 0o664)
-    start = time.time()
-    while True:
-        try:
-            fcntl.flock(lockfd, fcntl.LOCK_EX | fcntl.LOCK_NB)
-            break
-        except IOError as ex:
-            if ex.errno == errno.EAGAIN:
-                if timeout != -1 and time.time() - start > timeout:
-                    raise error.LockHeld(errno.EAGAIN, lockpath, description,
-                                         '')
-                else:
-                    time.sleep(0.05)
-                    continue
-            raise
-
-    try:
-        yield
-    finally:
-        fcntl.flock(lockfd, fcntl.LOCK_UN)
-        os.close(lockfd)



To: durin42, #hg-reviewers, pulkit
Cc: mercurial-devel
_______________________________________________
Mercurial-devel mailing list
[hidden email]
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel