mirror of
https://github.com/python/cpython.git
synced 2024-12-11 18:53:56 +08:00
94eaee6d49
Closes bug #1083645. Thanks Detlef Vollmann.
44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
import imp
|
|
from test.test_support import TestFailed, TestSkipped
|
|
try:
|
|
import thread
|
|
except ImportError:
|
|
raise TestSkipped("test only valid when thread support is available")
|
|
|
|
def verify_lock_state(expected):
|
|
if imp.lock_held() != expected:
|
|
raise TestFailed("expected imp.lock_held() to be %r" % expected)
|
|
|
|
def testLock():
|
|
LOOPS = 50
|
|
|
|
# The import lock may already be held, e.g. if the test suite is run
|
|
# via "import test.autotest".
|
|
lock_held_at_start = imp.lock_held()
|
|
verify_lock_state(lock_held_at_start)
|
|
|
|
for i in range(LOOPS):
|
|
imp.acquire_lock()
|
|
verify_lock_state(True)
|
|
|
|
for i in range(LOOPS):
|
|
imp.release_lock()
|
|
|
|
# The original state should be restored now.
|
|
verify_lock_state(lock_held_at_start)
|
|
|
|
if not lock_held_at_start:
|
|
try:
|
|
imp.release_lock()
|
|
except RuntimeError:
|
|
pass
|
|
else:
|
|
raise TestFailed("release_lock() without lock should raise "
|
|
"RuntimeError")
|
|
|
|
def test_main():
|
|
testLock()
|
|
|
|
if __name__ == "__main__":
|
|
test_main()
|