anchor.diff:  		return c.future;
   	}
   
  -	static Future _aquireLock(String email) async {
  +	static Future<bool> _aquireLock(String email) async {
   		int numTriesLeft = 100; //we'll throw an error after 5 seconds of trying
  -		if(inventoryLocked[email] != null) {
  -			while(inventoryLocked[email] && numTriesLeft > 0) {
  +		if (inventoryLocked[email] != null) {
  +			while (inventoryLocked[email] && numTriesLeft > 0) {
   				await _wait(new Duration(milliseconds: 50));
   				numTriesLeft--;
   			}
  -			if(inventoryLocked[email]) {
  -				throw "Could not acquire a lock for inventory of <email=$email>";
  +			if (inventoryLocked[email]) {
  +				Log.warn("Could not acquire a lock for inventory of <email=$email>");
  +				return false;
   			}
   		}
   
   		inventoryLocked[email] = true;
  +		return true;
   	}
   
   	static void _releaseLock(String email) {
  
positive.code: 	}
  
  	static Future<int> takeAnyItemsFromUser(String email, String itemType, int count, {simulate: false}) async {
  		await _aquireLock(email);
  		WebSocket userSocket = StreetUpdateHandler.userSockets[email];
  		InventoryV2 inv = await getInventory(email);
  		int taken = await inv._takeAnyItems(itemType, count, email, simulate: simulate);
  
negative.code: 			types = validTypes;
  		}
  
  		if (!(await _aquireLock(email))) {
  			return false;
  		}
  
  		WebSocket userSocket = StreetUpdateHandler.userSockets[email];
  		InventoryV2 inv = await getInventory(email);
  
  