mercurial/lock.py
changeset 26383 0fceb34806e1
parent 26359 c545d51c901e
child 26387 e16f80f89a29
equal deleted inserted replaced
26382:b673e89affc9 26383:0fceb34806e1
    49         self.desc = desc
    49         self.desc = desc
    50         self.parentlock = parentlock
    50         self.parentlock = parentlock
    51         self._parentheld = False
    51         self._parentheld = False
    52         self._inherited = False
    52         self._inherited = False
    53         self.postrelease  = []
    53         self.postrelease  = []
    54         self.pid = os.getpid()
    54         self.pid = self._getpid()
    55         self.delay = self.lock()
    55         self.delay = self.lock()
    56         if self.acquirefn:
    56         if self.acquirefn:
    57             self.acquirefn()
    57             self.acquirefn()
    58 
    58 
    59     def __del__(self):
    59     def __del__(self):
    65             # ensure the lock will be removed
    65             # ensure the lock will be removed
    66             # even if recursive locking did occur
    66             # even if recursive locking did occur
    67             self.held = 1
    67             self.held = 1
    68 
    68 
    69         self.release()
    69         self.release()
       
    70 
       
    71     def _getpid(self):
       
    72         # wrapper around os.getpid() to make testing easier
       
    73         return os.getpid()
    70 
    74 
    71     def lock(self):
    75     def lock(self):
    72         timeout = self.timeout
    76         timeout = self.timeout
    73         while True:
    77         while True:
    74             try:
    78             try:
   195         delayed to the last release call."""
   199         delayed to the last release call."""
   196         if self.held > 1:
   200         if self.held > 1:
   197             self.held -= 1
   201             self.held -= 1
   198         elif self.held == 1:
   202         elif self.held == 1:
   199             self.held = 0
   203             self.held = 0
   200             if os.getpid() != self.pid:
   204             if self._getpid() != self.pid:
   201                 # we forked, and are not the parent
   205                 # we forked, and are not the parent
   202                 return
   206                 return
   203             try:
   207             try:
   204                 if self.releasefn:
   208                 if self.releasefn:
   205                     self.releasefn()
   209                     self.releasefn()