diff options
Diffstat (limited to 'WebKitTools/Scripts/webkitpy/common/system/file_lock.py')
-rw-r--r-- | WebKitTools/Scripts/webkitpy/common/system/file_lock.py | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/WebKitTools/Scripts/webkitpy/common/system/file_lock.py b/WebKitTools/Scripts/webkitpy/common/system/file_lock.py deleted file mode 100644 index 7296958..0000000 --- a/WebKitTools/Scripts/webkitpy/common/system/file_lock.py +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env python -# Copyright (C) 2010 Gabor Rapcsanyi (rgabor@inf.u-szeged.hu), University of Szeged -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UNIVERSITY OF SZEGED OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -"""This class helps to lock files exclusively across processes.""" - -import logging -import os -import sys -import time - - -_log = logging.getLogger("webkitpy.common.system.file_lock") - - -class FileLock(object): - - def __init__(self, lock_file_path, max_wait_time_sec=20): - self._lock_file_path = lock_file_path - self._lock_file_descriptor = None - self._max_wait_time_sec = max_wait_time_sec - - def _create_lock(self): - if sys.platform in ('darwin', 'linux2', 'cygwin'): - import fcntl - fcntl.flock(self._lock_file_descriptor, fcntl.LOCK_EX | fcntl.LOCK_NB) - elif sys.platform == 'win32': - import msvcrt - msvcrt.locking(self._lock_file_descriptor, msvcrt.LK_NBLCK, 32) - - def _remove_lock(self): - if sys.platform in ('darwin', 'linux2', 'cygwin'): - import fcntl - fcntl.flock(self._lock_file_descriptor, fcntl.LOCK_UN) - elif sys.platform == 'win32': - import msvcrt - msvcrt.locking(self._lock_file_descriptor, msvcrt.LK_UNLCK, 32) - - def acquire_lock(self): - self._lock_file_descriptor = os.open(self._lock_file_path, os.O_TRUNC | os.O_CREAT) - start_time = time.time() - while True: - try: - self._create_lock() - return True - except IOError: - if time.time() - start_time > self._max_wait_time_sec: - _log.debug("File locking failed: %s" % str(sys.exc_info())) - os.close(self._lock_file_descriptor) - self._lock_file_descriptor = None - return False - - def release_lock(self): - try: - if self._lock_file_descriptor: - self._remove_lock() - os.close(self._lock_file_descriptor) - self._lock_file_descriptor = None - os.unlink(self._lock_file_path) - except (IOError, OSError): - _log.debug("Warning in release lock: %s" % str(sys.exc_info())) |