docs: def release(self):
          """release one ownership of the lock
  
          if the calling greenlet has :meth:`acquired <acquire>` the lock more
          than once this will simply decrement the counter. if this is a final
          release then a waiting greenlet is awoken
  
          :raises:
              `RuntimeError` if the calling greenlet is not the lock's owner
          """
          if not self._locked or self._owner is not compat.getcurrent():
              raise RuntimeError("cannot release un-acquired lock")
          self._count -= 1
          if self._count == 0:
              self._owner = None
              if self._waiters:
                  waiter = self._waiters.popleft()
                  self._locked = True
                  self._owner = waiter
                  scheduler.state.awoken_from_events.add(waiter)
              else:
                  self._locked = False
                  self._owner = None