mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			43 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()
 | 
