'Releases a read lock.
Returns True if the last recursive lock was released, False if
there are still outstanding locks.
Does limited correctness checking: if a read lock is released
when none are held, this will raise an assertion error.'

def release_read(self):

    assert (self._reads > 0)
    if ((self._reads == 1) and (self._writes == 0)):
        tty.debug('READ    LOCK:    {0.path}[{0._start}:{0._length}]    [Released]'.format(self))
        self._unlock()
        self._reads -= 1
        return True
    else:
        self._reads -= 1
        return False
