|  | @@ -145,7 +145,14 @@ class Repository:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def prepare_txn(self, transaction_id, do_cleanup=True):
 | 
	
		
			
				|  |  |          self._active_txn = True
 | 
	
		
			
				|  |  | -        self.lock.upgrade()
 | 
	
		
			
				|  |  | +        try:
 | 
	
		
			
				|  |  | +            self.lock.upgrade()
 | 
	
		
			
				|  |  | +        except UpgradableLock.WriteLockFailed:
 | 
	
		
			
				|  |  | +            # if upgrading the lock to exclusive fails, we do not have an
 | 
	
		
			
				|  |  | +            # active transaction. this is important for "serve" mode, where
 | 
	
		
			
				|  |  | +            # the repository instance lives on - even if exceptions happened.
 | 
	
		
			
				|  |  | +            self._active_txn = False
 | 
	
		
			
				|  |  | +            raise
 | 
	
		
			
				|  |  |          if not self.index:
 | 
	
		
			
				|  |  |              self.index = self.open_index(transaction_id)
 | 
	
		
			
				|  |  |          if transaction_id is None:
 |