docs: def waitUntilMaybeAvailable(self, owner, access):
          """Fire when the lock *might* be available. The caller will need to
          check with isAvailable() when the deferred fires. This loose form is
          used to avoid deadlocks. If we were interested in a stronger form,
          this would be named 'waitUntilAvailable', and the deferred would fire
          after the lock had been claimed.
          """
          debuglog("%s waitUntilAvailable(%s)" % (self, owner))
          assert isinstance(access, LockAccess)
          if self.isAvailable(owner, access):
              return defer.succeed(self)
          d = defer.Deferred()
  
          # Are we already in the wait queue?
          w = [i for i, w in enumerate(self.waiting) if w[0] is owner]
          if w:
              self.waiting[w[0]] = (owner, access, d)
          else:
              self.waiting.append((owner, access, d))
          return d