| Index: third_party/twisted_8_1/twisted/python/lockfile.py
|
| diff --git a/third_party/twisted_8_1/twisted/python/lockfile.py b/third_party/twisted_8_1/twisted/python/lockfile.py
|
| deleted file mode 100644
|
| index a6750d711fad0a3d036cbb6c8d1601780fda436e..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/python/lockfile.py
|
| +++ /dev/null
|
| @@ -1,143 +0,0 @@
|
| -# -*- test-case-name: twisted.test.test_lockfile -*-
|
| -# Copyright (c) 2005 Divmod, Inc.
|
| -# See LICENSE for details.
|
| -
|
| -
|
| -"""
|
| -Lock files.
|
| -"""
|
| -
|
| -__metaclass__ = type
|
| -
|
| -import errno, os
|
| -
|
| -from time import time as _uniquefloat
|
| -
|
| -def unique():
|
| - return str(long(_uniquefloat() * 1000))
|
| -
|
| -try:
|
| - from os import symlink
|
| - from os import readlink
|
| - from os import remove as rmlink
|
| - from os import rename as mvlink
|
| -except:
|
| - # XXX Implement an atomic thingamajig for win32
|
| - import shutil
|
| - def symlink(value, filename):
|
| - newlinkname = filename+"."+unique()+'.newlink'
|
| - newvalname = os.path.join(newlinkname,"symlink")
|
| - os.mkdir(newlinkname)
|
| - f = open(newvalname,'wb')
|
| - f.write(value)
|
| - f.flush()
|
| - f.close()
|
| - try:
|
| - os.rename(newlinkname, filename)
|
| - except:
|
| - os.remove(newvalname)
|
| - os.rmdir(newlinkname)
|
| - raise
|
| -
|
| - def readlink(filename):
|
| - return open(os.path.join(filename,'symlink'),'rb').read()
|
| -
|
| - def rmlink(filename):
|
| - shutil.rmtree(filename)
|
| -
|
| - def mvlink(src, dest):
|
| - try:
|
| - shutil.rmtree(dest)
|
| - except:
|
| - pass
|
| - os.rename(src,dest)
|
| -
|
| -
|
| -class FilesystemLock:
|
| - """A mutex.
|
| -
|
| - This relies on the filesystem property that creating
|
| - a symlink is an atomic operation and that it will
|
| - fail if the symlink already exists. Deleting the
|
| - symlink will release the lock.
|
| -
|
| - @ivar name: The name of the file associated with this lock.
|
| - @ivar clean: Indicates whether this lock was released cleanly by its
|
| - last owner. Only meaningful after C{lock} has been called and returns
|
| - True.
|
| - """
|
| -
|
| - clean = None
|
| - locked = False
|
| -
|
| - def __init__(self, name):
|
| - self.name = name
|
| -
|
| - def lock(self):
|
| - """Acquire this lock.
|
| -
|
| - @rtype: C{bool}
|
| - @return: True if the lock is acquired, false otherwise.
|
| -
|
| - @raise: Any exception os.symlink() may raise, other than
|
| - EEXIST.
|
| - """
|
| - try:
|
| - pid = readlink(self.name)
|
| - except (OSError, IOError), e:
|
| - if e.errno != errno.ENOENT:
|
| - raise
|
| - self.clean = True
|
| - else:
|
| - if not hasattr(os, 'kill'):
|
| - return False
|
| - try:
|
| - os.kill(int(pid), 0)
|
| - except (OSError, IOError), e:
|
| - if e.errno != errno.ESRCH:
|
| - raise
|
| - rmlink(self.name)
|
| - self.clean = False
|
| - else:
|
| - return False
|
| -
|
| - symlink(str(os.getpid()), self.name)
|
| - self.locked = True
|
| - return True
|
| -
|
| - def unlock(self):
|
| - """Release this lock.
|
| -
|
| - This deletes the directory with the given name.
|
| -
|
| - @raise: Any exception os.readlink() may raise, or
|
| - ValueError if the lock is not owned by this process.
|
| - """
|
| - pid = readlink(self.name)
|
| - if int(pid) != os.getpid():
|
| - raise ValueError("Lock %r not owned by this process" % (self.name,))
|
| - rmlink(self.name)
|
| - self.locked = False
|
| -
|
| -
|
| -def isLocked(name):
|
| - """Determine if the lock of the given name is held or not.
|
| -
|
| - @type name: C{str}
|
| - @param name: The filesystem path to the lock to test
|
| -
|
| - @rtype: C{bool}
|
| - @return: True if the lock is held, False otherwise.
|
| - """
|
| - l = FilesystemLock(name)
|
| - result = None
|
| - try:
|
| - result = l.lock()
|
| - finally:
|
| - if result:
|
| - l.unlock()
|
| - return not result
|
| -
|
| -
|
| -__all__ = ['FilesystemLock', 'isLocked']
|
| -
|
|
|