~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/counted_lock.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-03-25 04:20:12 UTC
  • mfrom: (3468.3.4 controlfiles)
  • Revision ID: pqm@pqm.ubuntu.com-20090325042012-23a6pm0mraw7g2kg
(mbp) better CountedLock handling of tokens,
        and bzrdir takes more responsibility for default file modes

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
 
28
28
    This can be used with any object that provides a basic Lock interface,
29
29
    including LockDirs and OS file locks.
 
30
 
 
31
    :ivar _token: While a write lock is held, this is the token 
 
32
        for it.
30
33
    """
31
34
 
32
35
    def __init__(self, real_lock):
65
68
 
66
69
        If the lock was originally acquired in read mode this will fail.
67
70
 
68
 
        :param token: If non-None, reacquire the lock using this token.
 
71
        :param token: If given and the lock is already held, 
 
72
            then validate that we already hold the real
 
73
            lock with this token.
 
74
 
 
75
        :returns: The token from the underlying lock.
69
76
        """
70
77
        if self._lock_count == 0:
71
 
            return_token = self._real_lock.lock_write(token)
 
78
            self._token = self._real_lock.lock_write(token=token)
72
79
            self._lock_mode = 'w'
73
80
            self._lock_count += 1
74
 
            return return_token
 
81
            return self._token
75
82
        elif self._lock_mode != 'w':
76
83
            raise errors.ReadOnlyError(self)
77
84
        else:
78
85
            self._real_lock.validate_token(token)
79
86
            self._lock_count += 1
80
 
            return token
 
87
            return self._token
81
88
 
82
89
    def unlock(self):
83
90
        if self._lock_count == 0: