From 28e8862254abe625af63feefa39e82290f1125cd Mon Sep 17 00:00:00 2001 From: P0nk Date: Thu, 11 Aug 2022 13:31:55 +0200 Subject: [PATCH] Stop using monitored locks in World --- src/main/java/net/server/world/World.java | 60 ++++++++++------------- 1 file changed, 25 insertions(+), 35 deletions(-) diff --git a/src/main/java/net/server/world/World.java b/src/main/java/net/server/world/World.java index f41775ee6b..c473aba652 100644 --- a/src/main/java/net/server/world/World.java +++ b/src/main/java/net/server/world/World.java @@ -32,11 +32,6 @@ import constants.game.GameConstants; import net.packet.Packet; import net.server.PlayerStorage; import net.server.Server; -import net.server.audit.LockCollector; -import net.server.audit.locks.*; -import net.server.audit.locks.factory.MonitoredReadLockFactory; -import net.server.audit.locks.factory.MonitoredReentrantLockFactory; -import net.server.audit.locks.factory.MonitoredWriteLockFactory; import net.server.channel.Channel; import net.server.channel.CharacterIdChannelPair; import net.server.coordinator.matchchecker.MatchCheckerCoordinator; @@ -69,6 +64,10 @@ import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; import static java.util.concurrent.TimeUnit.*; @@ -103,13 +102,12 @@ public class World { private final MatchCheckerCoordinator matchChecker = new MatchCheckerCoordinator(); private final PartySearchCoordinator partySearch = new PartySearchCoordinator(); - private final MonitoredReentrantReadWriteLock chnLock = new MonitoredReentrantReadWriteLock(MonitoredLockType.WORLD_CHANNELS, true); - private final MonitoredReadLock chnRLock = MonitoredReadLockFactory.createLock(chnLock); - private final MonitoredWriteLock chnWLock = MonitoredWriteLockFactory.createLock(chnLock); + private final Lock chnRLock; + private final Lock chnWLock; private final Map> accountChars = new HashMap<>(); private final Map accountStorages = new HashMap<>(); - private MonitoredReentrantLock accountCharsLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.WORLD_CHARS, true); + private final Lock accountCharsLock = new ReentrantLock(true); private final Set queuedGuilds = new HashSet<>(); private final Map, Pair>> queuedMarriages = new HashMap<>(); @@ -118,39 +116,39 @@ public class World { private final Map partyChars = new HashMap<>(); private final Map parties = new HashMap<>(); private final AtomicInteger runningPartyId = new AtomicInteger(); - private MonitoredReentrantLock partyLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.WORLD_PARTY, true); + private final Lock partyLock = new ReentrantLock(true); private final Map owlSearched = new LinkedHashMap<>(); private final List> cashItemBought = new ArrayList<>(9); - private final MonitoredReentrantReadWriteLock suggestLock = new MonitoredReentrantReadWriteLock(MonitoredLockType.WORLD_SUGGEST, true); - private final MonitoredReadLock suggestRLock = MonitoredReadLockFactory.createLock(suggestLock); - private final MonitoredWriteLock suggestWLock = MonitoredWriteLockFactory.createLock(suggestLock); + + private final Lock suggestRLock; + private final Lock suggestWLock; private final Map disabledServerMessages = new HashMap<>(); // reuse owl lock - private MonitoredReentrantLock srvMessagesLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.WORLD_SRVMESSAGES); + private final Lock srvMessagesLock = new ReentrantLock(); private ScheduledFuture srvMessagesSchedule; - private MonitoredReentrantLock activePetsLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.WORLD_PETS, true); + private Lock activePetsLock = new ReentrantLock(true); private final Map activePets = new LinkedHashMap<>(); private ScheduledFuture petsSchedule; private long petUpdate; - private MonitoredReentrantLock activeMountsLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.WORLD_MOUNTS, true); + private Lock activeMountsLock = new ReentrantLock(true); private final Map activeMounts = new LinkedHashMap<>(); private ScheduledFuture mountsSchedule; private long mountUpdate; - private MonitoredReentrantLock activePlayerShopsLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.WORLD_PSHOPS, true); + private Lock activePlayerShopsLock = new ReentrantLock(true); private final Map activePlayerShops = new LinkedHashMap<>(); - private MonitoredReentrantLock activeMerchantsLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.WORLD_MERCHS, true); + private Lock activeMerchantsLock = new ReentrantLock(true); private final Map> activeMerchants = new LinkedHashMap<>(); private ScheduledFuture merchantSchedule; private long merchantUpdate; private final Map registeredTimedMapObjects = new LinkedHashMap<>(); private ScheduledFuture timedMapObjectsSchedule; - private MonitoredReentrantLock timedMapObjectLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.WORLD_MAPOBJS, true); + private Lock timedMapObjectLock = new ReentrantLock(true); private final Map fishingAttempters = Collections.synchronizedMap(new WeakHashMap<>()); private Map playerHpDec = Collections.synchronizedMap(new WeakHashMap<>()); @@ -177,6 +175,14 @@ public class World { runningPartyId.set(1000000001); // partyid must not clash with charid to solve update item looting issues, found thanks to Vcoc runningMessengerId.set(1); + ReadWriteLock channelLock = new ReentrantReadWriteLock(true); + this.chnRLock = channelLock.readLock(); + this.chnWLock = channelLock.writeLock(); + + ReadWriteLock suggestLock = new ReentrantReadWriteLock(true); + this.suggestRLock = suggestLock.readLock(); + this.suggestWLock = suggestLock.writeLock(); + petUpdate = Server.getInstance().getCurrentTime(); mountUpdate = petUpdate; @@ -2102,22 +2108,6 @@ public class World { } closeWorldServices(); - disposeLocks(); - } - - private void disposeLocks() { - LockCollector.getInstance().registerDisposeAction(() -> emptyLocks()); - } - - private void emptyLocks() { - accountCharsLock = accountCharsLock.dispose(); - partyLock = partyLock.dispose(); - srvMessagesLock = srvMessagesLock.dispose(); - activePetsLock = activePetsLock.dispose(); - activeMountsLock = activeMountsLock.dispose(); - activePlayerShopsLock = activePlayerShopsLock.dispose(); - activeMerchantsLock = activeMerchantsLock.dispose(); - timedMapObjectLock = timedMapObjectLock.dispose(); } public final void shutdown() {