Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Side by Side Diff: Tools/Scripts/webkitpy/common/system/file_lock.py

Issue 17320009: Remove the 'http_lock' and 'file_lock' code from webkitpy. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: fix merge again Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | Tools/Scripts/webkitpy/common/system/file_lock_integrationtest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright (C) 2010 Gabor Rapcsanyi (rgabor@inf.u-szeged.hu), University of Sze ged
2 #
3 # All rights reserved.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
7 # are met:
8 # 1. Redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer.
10 # 2. Redistributions in binary form must reproduce the above copyright
11 # notice, this list of conditions and the following disclaimer in the
12 # documentation and/or other materials provided with the distribution.
13 #
14 # THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
15 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
18 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
26 """This class helps to lock files exclusively across processes."""
27
28 import logging
29 import os
30 import sys
31 import time
32
33
34 _log = logging.getLogger(__name__)
35
36
37 class FileLock(object):
38
39 def __init__(self, lock_file_path, max_wait_time_sec=20):
40 self._lock_file_path = lock_file_path
41 self._lock_file_descriptor = None
42 self._max_wait_time_sec = max_wait_time_sec
43
44 def _create_lock(self):
45 if sys.platform == 'win32':
46 import msvcrt
47 msvcrt.locking(self._lock_file_descriptor, msvcrt.LK_NBLCK, 32)
48 else:
49 import fcntl
50 fcntl.flock(self._lock_file_descriptor, fcntl.LOCK_EX | fcntl.LOCK_N B)
51
52 def _remove_lock(self):
53 if sys.platform == 'win32':
54 import msvcrt
55 msvcrt.locking(self._lock_file_descriptor, msvcrt.LK_UNLCK, 32)
56 else:
57 import fcntl
58 fcntl.flock(self._lock_file_descriptor, fcntl.LOCK_UN)
59
60 def acquire_lock(self):
61 self._lock_file_descriptor = os.open(self._lock_file_path, os.O_TRUNC | os.O_CREAT)
62 start_time = time.time()
63 while True:
64 try:
65 self._create_lock()
66 return True
67 except IOError:
68 if time.time() - start_time > self._max_wait_time_sec:
69 _log.debug("File locking failed: %s" % str(sys.exc_info()))
70 os.close(self._lock_file_descriptor)
71 self._lock_file_descriptor = None
72 return False
73 # There's no compelling reason to spin hard here, so sleep for a bit.
74 time.sleep(0.01)
75
76 def release_lock(self):
77 try:
78 if self._lock_file_descriptor:
79 self._remove_lock()
80 os.close(self._lock_file_descriptor)
81 self._lock_file_descriptor = None
82 os.unlink(self._lock_file_path)
83 except (IOError, OSError):
84 _log.debug("Warning in release lock: %s" % str(sys.exc_info()))
OLDNEW
« no previous file with comments | « no previous file | Tools/Scripts/webkitpy/common/system/file_lock_integrationtest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698