mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-06 09:56:05 +00:00

This is the conclusion of an effort to get LLDB's Python code structured into a bona-fide Python package. This has a number of benefits, but most notably the ability to more easily share Python code between different but related pieces of LLDB's Python infrastructure (for example, `scripts` can now share code with `test`). llvm-svn: 251532
28 lines
617 B
Python
28 lines
617 B
Python
"""
|
|
Interprocess mutex based on file locks
|
|
"""
|
|
|
|
import fcntl
|
|
import os
|
|
|
|
class Lock:
|
|
|
|
def __init__(self, filename):
|
|
self.filename = filename
|
|
# This will create it if it does not exist already
|
|
unbuffered = 0
|
|
self.handle = open(filename, 'a+', unbuffered)
|
|
|
|
def acquire(self):
|
|
fcntl.flock(self.handle, fcntl.LOCK_EX)
|
|
|
|
# will throw IOError if unavailable
|
|
def try_acquire(self):
|
|
fcntl.flock(self.handle, fcntl.LOCK_NB | fcntl.LOCK_EX)
|
|
|
|
def release(self):
|
|
fcntl.flock(self.handle, fcntl.LOCK_UN)
|
|
|
|
def __del__(self):
|
|
self.handle.close()
|