Stop using monitored locks in MapleMap

This commit is contained in:
P0nk
2022-08-11 13:38:16 +02:00
parent 28e8862254
commit 42043c3d6c

View File

@@ -38,13 +38,6 @@ import constants.id.MobId;
import constants.inventory.ItemConstants; import constants.inventory.ItemConstants;
import net.packet.Packet; import net.packet.Packet;
import net.server.Server; import net.server.Server;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReadLock;
import net.server.audit.locks.MonitoredReentrantReadWriteLock;
import net.server.audit.locks.MonitoredWriteLock;
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.Channel;
import net.server.coordinator.world.MonsterAggroCoordinator; import net.server.coordinator.world.MonsterAggroCoordinator;
import net.server.services.task.channel.MobMistService; import net.server.services.task.channel.MobMistService;
@@ -77,6 +70,9 @@ 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.locks.Lock; 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 java.util.function.Predicate; import java.util.function.Predicate;
import static java.util.concurrent.TimeUnit.MINUTES; import static java.util.concurrent.TimeUnit.MINUTES;
@@ -162,15 +158,15 @@ public class MapleMap {
private int timeExpand; private int timeExpand;
//locks //locks
private final MonitoredReadLock chrRLock; private final Lock chrRLock;
private final MonitoredWriteLock chrWLock; private final Lock chrWLock;
private final MonitoredReadLock objectRLock; private final Lock objectRLock;
private final MonitoredWriteLock objectWLock; private final Lock objectWLock;
private final Lock lootLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MAP_LOOT, true); private final Lock lootLock = new ReentrantLock(true);
// due to the nature of loadMapFromWz (synchronized), sole function that calls 'generateMapDropRangeCache', this lock remains optional. // due to the nature of loadMapFromWz (synchronized), sole function that calls 'generateMapDropRangeCache', this lock remains optional.
private static final Lock bndLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MAP_BOUNDS, true); private static final Lock bndLock = new ReentrantLock(true);
public MapleMap(int mapid, int world, int channel, int returnMapId, float monsterRate) { public MapleMap(int mapid, int world, int channel, int returnMapId, float monsterRate) {
this.mapid = mapid; this.mapid = mapid;
@@ -181,13 +177,14 @@ public class MapleMap {
if (this.monsterRate == 0) { if (this.monsterRate == 0) {
this.monsterRate = 1; this.monsterRate = 1;
} }
final MonitoredReentrantReadWriteLock chrLock = new MonitoredReentrantReadWriteLock(MonitoredLockType.MAP_CHRS, true);
chrRLock = MonitoredReadLockFactory.createLock(chrLock);
chrWLock = MonitoredWriteLockFactory.createLock(chrLock);
final MonitoredReentrantReadWriteLock objectLock = new MonitoredReentrantReadWriteLock(MonitoredLockType.MAP_OBJS, true); final ReadWriteLock chrLock = new ReentrantReadWriteLock(true);
objectRLock = MonitoredReadLockFactory.createLock(objectLock); chrRLock = chrLock.readLock();
objectWLock = MonitoredWriteLockFactory.createLock(objectLock); chrWLock = chrLock.writeLock();
final ReadWriteLock objectLock = new ReentrantReadWriteLock(true);
objectRLock = objectLock.readLock();
objectWLock = objectLock.writeLock();
aggroMonitor = new MonsterAggroCoordinator(); aggroMonitor = new MonsterAggroCoordinator();
} }