Remove monitored locks with default fairness, use basic version

This commit is contained in:
P0nk
2022-08-11 14:26:23 +02:00
parent 8657b765b1
commit 54878ebe8c
9 changed files with 25 additions and 57 deletions

View File

@@ -94,6 +94,7 @@ import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -219,8 +220,8 @@ public class Character extends AbstractCharacterObject {
private final Lock chrLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_CHR, true); private final Lock chrLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_CHR, true);
private final Lock evtLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_EVT, true); private final Lock evtLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_EVT, true);
private final Lock petLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_PET, true); private final Lock petLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_PET, true);
private final Lock prtLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_PRT); private final Lock prtLock = new ReentrantLock();
private final Lock cpnLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_CPN); private final Lock cpnLock = new ReentrantLock();
private final Map<Integer, Set<Integer>> excluded = new LinkedHashMap<>(); private final Map<Integer, Set<Integer>> excluded = new LinkedHashMap<>();
private final Set<Integer> excludedItems = new LinkedHashSet<>(); private final Set<Integer> excludedItems = new LinkedHashSet<>();
private final Set<Integer> disabledPartySearchInvites = new LinkedHashSet<>(); private final Set<Integer> disabledPartySearchInvites = new LinkedHashSet<>();

View File

@@ -21,8 +21,6 @@
*/ */
package client; package client;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import tools.DatabaseConnection; import tools.DatabaseConnection;
import tools.PacketCreator; import tools.PacketCreator;
@@ -33,13 +31,14 @@ import java.sql.SQLException;
import java.util.*; import java.util.*;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public final class MonsterBook { public final class MonsterBook {
private int specialCard = 0; private int specialCard = 0;
private int normalCard = 0; private int normalCard = 0;
private int bookLevel = 1; private int bookLevel = 1;
private final Map<Integer, Integer> cards = new LinkedHashMap<>(); private final Map<Integer, Integer> cards = new LinkedHashMap<>();
private final Lock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.BOOK); private final Lock lock = new ReentrantLock();
public Set<Entry<Integer, Integer>> getCardSet() { public Set<Entry<Integer, Integer>> getCardSet() {
lock.lock(); lock.lock();

View File

@@ -26,10 +26,6 @@ import net.server.audit.locks.active.TrackerReentrantLock;
* @author RonanLana * @author RonanLana
*/ */
public class MonitoredReentrantLockFactory { public class MonitoredReentrantLockFactory {
public static TrackerReentrantLock createLock(MonitoredLockType id) {
return new TrackerReentrantLock(id);
}
public static TrackerReentrantLock createLock(MonitoredLockType id, boolean fair) { public static TrackerReentrantLock createLock(MonitoredLockType id, boolean fair) {
return new TrackerReentrantLock(id, fair); return new TrackerReentrantLock(id, fair);
} }

View File

@@ -1,7 +1,5 @@
package net.server.coordinator.session; package net.server.coordinator.session;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -10,6 +8,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/** /**
* Manages session initialization using remote host (ip address). * Manages session initialization using remote host (ip address).
@@ -24,7 +23,7 @@ public class SessionInitialization {
SessionInitialization() { SessionInitialization() {
for (int i = 0; i < 100; i++) { for (int i = 0; i < 100; i++) {
locks.add(MonitoredReentrantLockFactory.createLock(MonitoredLockType.SERVER_LOGIN_COORD)); locks.add(new ReentrantLock());
} }
} }

View File

@@ -22,7 +22,6 @@ package net.server.coordinator.world;
import client.Character; import client.Character;
import config.YamlConfig; import config.YamlConfig;
import net.server.Server; import net.server.Server;
import net.server.audit.LockCollector;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReentrantLock; import net.server.audit.locks.MonitoredReentrantLock;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
@@ -34,13 +33,14 @@ import tools.Pair;
import java.util.*; import java.util.*;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/** /**
* @author Ronan * @author Ronan
*/ */
public class MonsterAggroCoordinator { public class MonsterAggroCoordinator {
private final Lock lock = new ReentrantLock();
private MonitoredReentrantLock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MAP_AGGRO);
private final MonitoredReentrantLock idleLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MAP_AGGRO_IDLE, true); private final MonitoredReentrantLock idleLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MAP_AGGRO_IDLE, true);
private long lastStopTime = Server.getInstance().getCurrentTime(); private long lastStopTime = Server.getInstance().getCurrentTime();
@@ -375,15 +375,5 @@ public class MonsterAggroCoordinator {
} finally { } finally {
lock.unlock(); lock.unlock();
} }
disposeLocks();
}
private void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
}
private void emptyLocks() {
lock = lock.dispose();
} }
} }

View File

@@ -25,10 +25,6 @@ import client.Character;
import config.YamlConfig; import config.YamlConfig;
import constants.game.GameConstants; import constants.game.GameConstants;
import net.server.Server; import net.server.Server;
import net.server.audit.LockCollector;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReentrantLock;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import net.server.channel.Channel; import net.server.channel.Channel;
import net.server.guild.Guild; import net.server.guild.Guild;
import net.server.world.Party; import net.server.world.Party;
@@ -50,6 +46,8 @@ import javax.script.Invocable;
import javax.script.ScriptException; import javax.script.ScriptException;
import java.util.*; import java.util.*;
import java.util.concurrent.Semaphore; import java.util.concurrent.Semaphore;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.SECONDS; import static java.util.concurrent.TimeUnit.SECONDS;
@@ -75,9 +73,9 @@ public class EventManager {
private Integer readyId = 0, onLoadInstances = 0; private Integer readyId = 0, onLoadInstances = 0;
private final Properties props = new Properties(); private final Properties props = new Properties();
private final String name; private final String name;
private MonitoredReentrantLock lobbyLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EM_LOBBY); private final Lock lobbyLock = new ReentrantLock();
private MonitoredReentrantLock queueLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EM_QUEUE); private final Lock queueLock = new ReentrantLock();
private MonitoredReentrantLock startLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EM_START); private final Lock startLock = new ReentrantLock();
private final Set<Integer> playerPermit = new HashSet<>(); private final Set<Integer> playerPermit = new HashSet<>();
private final Semaphore startSemaphore = new Semaphore(7); private final Semaphore startSemaphore = new Semaphore(7);
@@ -139,18 +137,6 @@ public class EventManager {
wserv = null; wserv = null;
server = null; server = null;
iv = null; iv = null;
disposeLocks();
}
private void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
}
private void emptyLocks() {
lobbyLock = lobbyLock.dispose();
queueLock = queueLock.dispose();
startLock = startLock.dispose();
} }
private List<Integer> convertToIntegerList(List<Object> objects) { private List<Integer> convertToIntegerList(List<Object> objects) {

View File

@@ -26,8 +26,6 @@ import config.YamlConfig;
import constants.id.ItemId; import constants.id.ItemId;
import constants.inventory.ItemConstants; import constants.inventory.ItemConstants;
import net.server.Server; import net.server.Server;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import provider.Data; import provider.Data;
import provider.DataProvider; import provider.DataProvider;
import provider.DataProviderFactory; import provider.DataProviderFactory;
@@ -42,6 +40,7 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.*; import java.util.*;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import static java.util.concurrent.TimeUnit.DAYS; import static java.util.concurrent.TimeUnit.DAYS;
import static java.util.concurrent.TimeUnit.HOURS; import static java.util.concurrent.TimeUnit.HOURS;
@@ -261,7 +260,7 @@ public class CashShop {
private final List<Item> inventory = new ArrayList<>(); private final List<Item> inventory = new ArrayList<>();
private final List<Integer> wishList = new ArrayList<>(); private final List<Integer> wishList = new ArrayList<>();
private int notes = 0; private int notes = 0;
private final Lock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CASHSHOP); private final Lock lock = new ReentrantLock();
public CashShop(int accountId, int characterId, int jobType) throws SQLException { public CashShop(int accountId, int characterId, int jobType) throws SQLException {
this.accountId = accountId; this.accountId = accountId;

View File

@@ -66,6 +66,8 @@ import java.util.Map.Entry;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Monster extends AbstractLoadedLife { public class Monster extends AbstractLoadedLife {
private static final Logger log = LoggerFactory.getLogger(Monster.class); private static final Logger log = LoggerFactory.getLogger(Monster.class);
@@ -98,11 +100,11 @@ public class Monster extends AbstractLoadedLife {
private Runnable removeAfterAction = null; private Runnable removeAfterAction = null;
private boolean availablePuppetUpdate = true; private boolean availablePuppetUpdate = true;
private MonitoredReentrantLock externalLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_EXT); private final Lock externalLock = new ReentrantLock();
private MonitoredReentrantLock monsterLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB, true); private MonitoredReentrantLock monsterLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB, true);
private MonitoredReentrantLock statiLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_STATI); private final Lock statiLock = new ReentrantLock();
private MonitoredReentrantLock animationLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_ANI); private final Lock animationLock = new ReentrantLock();
private final MonitoredReentrantLock aggroUpdateLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_AGGRO); private final Lock aggroUpdateLock = new ReentrantLock();
public Monster(int id, MonsterStats stats) { public Monster(int id, MonsterStats stats) {
super(id); super(id);
@@ -2203,9 +2205,6 @@ public class Monster extends AbstractLoadedLife {
} }
private void emptyLocks() { private void emptyLocks() {
externalLock = externalLock.dispose();
monsterLock = monsterLock.dispose(); monsterLock = monsterLock.dispose();
statiLock = statiLock.dispose();
animationLock = animationLock.dispose();
} }
} }

View File

@@ -23,12 +23,11 @@ package server.maps;
import client.Character; import client.Character;
import client.Client; import client.Client;
import client.inventory.Item; import client.inventory.Item;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import tools.PacketCreator; import tools.PacketCreator;
import java.awt.*; import java.awt.*;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import static java.util.concurrent.TimeUnit.SECONDS; import static java.util.concurrent.TimeUnit.SECONDS;
@@ -40,7 +39,7 @@ public class MapItem extends AbstractMapObject {
protected byte type; protected byte type;
protected boolean pickedUp = false, playerDrop, partyDrop; protected boolean pickedUp = false, playerDrop, partyDrop;
protected long dropTime; protected long dropTime;
private final Lock itemLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MAP_ITEM); private final Lock itemLock = new ReentrantLock();
public MapItem(Item item, Point position, MapObject dropper, Character owner, Client ownerClient, byte type, boolean playerDrop) { public MapItem(Item item, Point position, MapObject dropper, Character owner, Client ownerClient, byte type, boolean playerDrop) {
setPosition(position); setPosition(position);