#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
import sys
import threading
import traceback
# Rename some stuff so "from pkg.nrlock import *" is safe
"""Interface and implementation for Non-Reentrant locks. Derived from
RLocks (which are reentrant locks). The default Python base locking
type, threading.Lock(), is non-reentrant but it doesn't support any
operations other than aquire() and release(), and we'd like to be
able to support things like RLocks._is_owned() so that we can "assert"
lock ownership assumptions in our code."""
raise NRLockException("Recursive NRLock acquire")
"""A boolean indicating whether the lock is currently locked."""
errbuf = ""
if not owner:
return errbuf
# Get stack of current owner, if lock is owned.
continue
errbuf += "Stack of owner:\n"
if txt:
errbuf += "\n"
break
return errbuf
try:
except RuntimeError:
errbuf = "Release of unacquired lock\n"
raise NRLockException(errbuf)
if args:
else: