예제 #1
0
    def do_acquire(self, waitflag=False):
        locked = False

        if waitflag:
            blockflag = 0
        else:
            blockflag = fcntl.LOCK_NB

        self.fd = posix.open(self.fn, O_CREAT | O_RDWR, 0600)
        try:
            fcntl.flock(self.fd, fcntl.LOCK_EX | blockflag)
            # locked it
            try:
                posix.ftruncate(self.fd, 0)
                posix.write(self.fd, ` os.getpid() ` + '\n')
                locked = True
            except:
                self.do_release()
                raise
        except IOError, x:
            if x.errno == errno.EWOULDBLOCK:
                # failed to lock
                posix.close(self.fd)
                del self.fd
            else:
                raise
예제 #2
0
파일: glock.py 프로젝트: onecommons/rhizome
 def do_release(self):
     if self.fd is not None:
         posix.ftruncate(self.fd, 0)
         fcntl.flock(self.fd, fcntl.LOCK_UN)
         posix.close(self.fd)
         self.fd = None
         self._locked = False
예제 #3
0
파일: glock.py 프로젝트: HengeSense/vesper
 def do_release(self):
     if self.fd is not None:
         posix.ftruncate(self.fd, 0)
         fcntl.flock(self.fd, fcntl.LOCK_UN)
         posix.close(self.fd)
         self.fd = None
         self._locked = False
예제 #4
0
파일: glock.py 프로젝트: HengeSense/vesper
        def do_acquire(self, waitflag=False):
            locked = False

            if waitflag:
                blockflag = 0
            else:
                blockflag = fcntl.LOCK_NB

            self.fd = posix.open(self.fn, O_CREAT | O_RDWR, 0600)
            try:
                fcntl.flock(self.fd, fcntl.LOCK_EX|blockflag)
                # locked it
                try:
                    posix.ftruncate(self.fd, 0)
                    posix.write(self.fd, `os.getpid()` + '\n')
                    locked = True
                except:
                    self.do_release()
                    raise
            except IOError, x:
                if x.errno == errno.EWOULDBLOCK:
                    # failed to lock
                    posix.close(self.fd)
                    del self.fd
                else:
                    raise
예제 #5
0
 def test_ftruncate(self):
     if hasattr(posix, 'ftruncate'):
         fp = open(test_support.TESTFN, 'w+')
         try:
             # we need to have some data to truncate
             fp.write('test')
             fp.flush()
             posix.ftruncate(fp.fileno(), 0)
         finally:
             fp.close()
예제 #6
0
 def test_ftruncate(self):
     if hasattr(posix, "ftruncate"):
         fp = open(test_support.TESTFN, "w+")
         try:
             # we need to have some data to truncate
             fp.write("test")
             fp.flush()
             posix.ftruncate(fp.fileno(), 0)
         finally:
             fp.close()
예제 #7
0
def SetSpeedup(speedup):
    global f
    speedup = float(speedup)
    # Opening the file for reading and writing prevents blocking until a reader opens the file.
    if f is None:
        f = posix.open(FIFO, posix.O_RDWR | posix.O_CREAT)
    posix.ftruncate(f, 0)
    SEEK_SET = 0
    posix.lseek(f, 0, SEEK_SET)
    posix.write(f, struct.pack("f", speedup))
예제 #8
0
 def do_release(self):
     posix.ftruncate(self.fd, 0)
     fcntl.flock(self.fd, fcntl.LOCK_UN)
     posix.close(self.fd)
     del self.fd