Remove monitored locks (fair), use basic version

This commit is contained in:
P0nk
2022-08-11 14:45:48 +02:00
parent 54878ebe8c
commit 4fb632ecdb
22 changed files with 50 additions and 175 deletions

View File

@@ -45,8 +45,6 @@ import net.packet.Packet;
import net.server.PlayerBuffValueHolder;
import net.server.PlayerCoolDownValueHolder;
import net.server.Server;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import net.server.coordinator.world.InviteCoordinator;
import net.server.guild.Alliance;
import net.server.guild.Guild;
@@ -217,9 +215,9 @@ public class Character extends AbstractCharacterObject {
private ScheduledFuture<?> chairRecoveryTask = null;
private ScheduledFuture<?> pendantOfSpirit = null; //1122017
private ScheduledFuture<?> cpqSchedule = null;
private final Lock chrLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_CHR, true);
private final Lock evtLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_EVT, true);
private final Lock petLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_PET, true);
private final Lock chrLock = new ReentrantLock(true);
private final Lock evtLock = new ReentrantLock(true);
private final Lock petLock = new ReentrantLock(true);
private final Lock prtLock = new ReentrantLock();
private final Lock cpnLock = new ReentrantLock();
private final Map<Integer, Set<Integer>> excluded = new LinkedHashMap<>();

View File

@@ -36,8 +36,6 @@ import net.packet.Packet;
import net.packet.logging.LoggingUtil;
import net.packet.logging.MonitoredChrLogger;
import net.server.Server;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import net.server.channel.Channel;
import net.server.coordinator.login.LoginBypassCoordinator;
import net.server.coordinator.session.Hwid;
@@ -81,6 +79,7 @@ import java.util.Date;
import java.util.*;
import java.util.concurrent.Semaphore;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import static java.util.concurrent.TimeUnit.SECONDS;
@@ -122,9 +121,9 @@ public class Client extends ChannelInboundHandlerAdapter {
private byte gender = -1;
private boolean disconnecting = false;
private final Semaphore actionsSemaphore = new Semaphore(7);
private final Lock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CLIENT, true);
private final Lock encoderLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CLIENT_ENCODER, true);
private final Lock announcerLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CLIENT_ANNOUNCER, true);
private final Lock lock = new ReentrantLock(true);
private final Lock encoderLock = new ReentrantLock(true);
private final Lock announcerLock = new ReentrantLock(true);
// thanks Masterrulax & try2hack for pointing out a bottleneck issue with shared locks, shavit for noticing an opportunity for improvement
private Calendar tempBanCalendar;
private int votePoints;

View File

@@ -25,8 +25,6 @@ import client.Character;
import client.Client;
import client.inventory.manipulator.InventoryManipulator;
import constants.inventory.ItemConstants;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import server.ItemInformationProvider;
@@ -36,6 +34,7 @@ import tools.Pair;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author Matze, Ronan
@@ -44,7 +43,7 @@ public class Inventory implements Iterable<Item> {
private static final Logger log = LoggerFactory.getLogger(Inventory.class);
protected final Map<Short, Item> inventory;
protected final InventoryType type;
protected final Lock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.INVENTORY, true);
protected final Lock lock = new ReentrantLock(true);
protected Character owner;
protected byte slotLimit;

View File

@@ -20,8 +20,6 @@
*/
package client.inventory;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import tools.DatabaseConnection;
import tools.Pair;
@@ -29,6 +27,7 @@ import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author Flav
@@ -52,7 +51,7 @@ public enum ItemFactory {
static {
for (int i = 0; i < lockCount; i++) {
locks[i] = MonitoredReentrantLockFactory.createLock(MonitoredLockType.ITEM, true);
locks[i] = new ReentrantLock(true);
}
}

View File

@@ -22,8 +22,6 @@
package net.server;
import client.Disease;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import server.life.MobSkill;
import tools.Pair;
@@ -31,6 +29,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author Danny//changed to map :3
@@ -38,7 +37,7 @@ import java.util.concurrent.locks.Lock;
*/
public class PlayerBuffStorage {
private final int id = (int) (Math.random() * 100);
private final Lock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.BUFF_STORAGE, true);
private final Lock lock = new ReentrantLock(true);
private final Map<Integer, List<PlayerBuffValueHolder>> buffs = new HashMap<>();
private final Map<Integer, Map<Disease, Pair<Long, MobSkill>>> diseases = new HashMap<>();

View File

@@ -1,32 +0,0 @@
/*
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2016 - 2019 RonanLana
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation version 3 as published by
the Free Software Foundation. You may not use, modify or distribute
this program under any other version of the GNU Affero General Public
License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.server.audit.locks.factory;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.active.TrackerReentrantLock;
/**
* @author RonanLana
*/
public class MonitoredReentrantLockFactory {
public static TrackerReentrantLock createLock(MonitoredLockType id, boolean fair) {
return new TrackerReentrantLock(id, fair);
}
}

View File

@@ -22,9 +22,6 @@ package net.server.coordinator.world;
import client.Character;
import config.YamlConfig;
import net.server.Server;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReentrantLock;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import server.TimerManager;
import server.life.Monster;
import server.maps.MapleMap;
@@ -41,7 +38,7 @@ import java.util.concurrent.locks.ReentrantLock;
*/
public class MonsterAggroCoordinator {
private final Lock lock = new ReentrantLock();
private final MonitoredReentrantLock idleLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MAP_AGGRO_IDLE, true);
private final Lock idleLock = new ReentrantLock(true);
private long lastStopTime = Server.getInstance().getCurrentTime();
private ScheduledFuture<?> aggroMonitor = null;

View File

@@ -27,8 +27,6 @@ import config.YamlConfig;
import net.packet.Packet;
import net.server.PlayerStorage;
import net.server.Server;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import net.server.channel.Channel;
import net.server.coordinator.matchchecker.MatchCheckerCoordinator;
import net.server.coordinator.world.InviteCoordinator;
@@ -45,6 +43,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Guild {
private static final Logger log = LoggerFactory.getLogger(Guild.class);
@@ -54,7 +53,7 @@ public class Guild {
}
private final List<GuildCharacter> members;
private final Lock membersLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.GUILD, true);
private final Lock membersLock = new ReentrantLock(true);
private final String[] rankTitles = new String[5]; // 1 = master, 2 = jr, 5 = lowest member
private String name, notice;

View File

@@ -21,16 +21,16 @@ package net.server.services;
import config.YamlConfig;
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 server.TimerManager;
import tools.Pair;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author Ronan
@@ -42,17 +42,14 @@ public abstract class BaseScheduler {
private final Map<Object, Pair<Runnable, Long>> registeredEntries = new HashMap<>();
private ScheduledFuture<?> schedulerTask = null;
private MonitoredReentrantLock schedulerLock;
private final Lock schedulerLock = new ReentrantLock(true);
private final Runnable monitorTask = () -> runBaseSchedule();
protected BaseScheduler(MonitoredLockType lockType) {
schedulerLock = MonitoredReentrantLockFactory.createLock(lockType, true);
}
// NOTE: practice EXTREME caution when adding external locks to the scheduler system, if you don't know what you're doing DON'T USE THIS.
protected BaseScheduler(MonitoredLockType lockType, List<MonitoredReentrantLock> extLocks) {
schedulerLock = MonitoredReentrantLockFactory.createLock(lockType, true);
externalLocks.addAll(extLocks);
}
@@ -184,15 +181,5 @@ public abstract class BaseScheduler {
unlockScheduler();
externalLocks.clear();
}
disposeLocks();
}
private void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
}
private void emptyLocks() {
schedulerLock = schedulerLock.dispose();
}
}

View File

@@ -20,15 +20,14 @@
package net.server.services.task.channel;
import config.YamlConfig;
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.services.BaseScheduler;
import net.server.services.BaseService;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author Ronan
@@ -63,7 +62,7 @@ public class MobAnimationService extends BaseService {
private class MobAnimationScheduler extends BaseScheduler {
Set<Integer> onAnimationMobs = new HashSet<>(1000);
private MonitoredReentrantLock animationLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHANNEL_MOBANIMAT, true);
private final Lock animationLock = new ReentrantLock(true);
public MobAnimationScheduler() {
super(MonitoredLockType.CHANNEL_MOBACTION);
@@ -98,18 +97,9 @@ public class MobAnimationService extends BaseService {
@Override
public void dispose() {
disposeLocks();
super.dispose();
}
private void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
}
private void emptyLocks() {
animationLock = animationLock.dispose();
}
}
}

View File

@@ -21,10 +21,7 @@ package net.server.services.task.channel;
import client.status.MonsterStatusEffect;
import config.YamlConfig;
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.services.BaseScheduler;
import net.server.services.BaseService;
@@ -32,6 +29,8 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author Ronan
@@ -71,7 +70,7 @@ public class MobStatusService extends BaseService {
private class MobStatusScheduler extends BaseScheduler {
private final Map<MonsterStatusEffect, MobStatusOvertimeEntry> registeredMobStatusOvertime = new HashMap<>();
private MonitoredReentrantLock overtimeStatusLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHANNEL_OVTSTATUS, true);
private final Lock overtimeStatusLock = new ReentrantLock(true);
private class MobStatusOvertimeEntry {
private int procCount;
@@ -144,18 +143,9 @@ public class MobStatusService extends BaseService {
@Override
public void dispose() {
disposeLocks();
super.dispose();
}
private void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
}
private void emptyLocks() {
overtimeStatusLock = overtimeStatusLock.dispose();
}
}
}

View File

@@ -24,10 +24,6 @@ package net.server.world;
import client.Character;
import client.Client;
import config.YamlConfig;
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.coordinator.matchchecker.MatchCheckerCoordinator;
import net.server.coordinator.matchchecker.MatchCheckerListenerFactory.MatchCheckerType;
import scripting.event.EventInstanceManager;
@@ -38,6 +34,8 @@ import tools.PacketCreator;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Party {
@@ -52,7 +50,7 @@ public class Party {
private final Map<Integer, Door> doors = new HashMap<>();
private MonitoredReentrantLock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.PARTY, true);
private final Lock lock = new ReentrantLock(true);
public Party(int id, PartyCharacter chrfor) {
this.leaderId = chrfor.getId();
@@ -281,14 +279,6 @@ public class Party {
}
}
public void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
}
private void emptyLocks() {
lock = lock.dispose();
}
@Override
public int hashCode() {
final int prime = 31;

View File

@@ -2103,10 +2103,6 @@ public class World {
partyLock.unlock();
}
for (Party p : pList) {
p.disposeLocks();
}
closeWorldServices();
}

View File

@@ -21,10 +21,6 @@ package scripting.event.scheduler;
import config.YamlConfig;
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 server.ThreadManager;
import server.TimerManager;
@@ -34,6 +30,8 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author Ronan
@@ -45,13 +43,9 @@ public class EventScriptScheduler {
private final Map<Runnable, Long> registeredEntries = new HashMap<>();
private ScheduledFuture<?> schedulerTask = null;
private MonitoredReentrantLock schedulerLock;
private final Lock schedulerLock = new ReentrantLock(true);
private final Runnable monitorTask = () -> runBaseSchedule();
public EventScriptScheduler() {
schedulerLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EM_SCHDL, true);
}
private void runBaseSchedule() {
List<Runnable> toRemove;
Map<Runnable, Long> registeredEntriesCopy;
@@ -148,16 +142,6 @@ public class EventScriptScheduler {
} finally {
schedulerLock.unlock();
}
disposeLocks();
});
}
private void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
}
private void emptyLocks() {
schedulerLock = schedulerLock.dispose();
}
}

View File

@@ -23,8 +23,6 @@ import client.inventory.InventoryType;
import client.inventory.Item;
import client.inventory.ItemFactory;
import constants.game.GameConstants;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import provider.Data;
@@ -42,6 +40,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author Matze
@@ -57,7 +56,7 @@ public class Storage {
private byte slots;
private final Map<InventoryType, List<Item>> typeItems = new HashMap<>();
private List<Item> items = new LinkedList<>();
private final Lock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.STORAGE, true);
private final Lock lock = new ReentrantLock(true);
private Storage(int id, byte slots, int meso) {
this.id = id;

View File

@@ -28,9 +28,6 @@ import constants.id.MobId;
import net.packet.Packet;
import net.server.PlayerStorage;
import net.server.Server;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -45,6 +42,8 @@ import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import static java.util.concurrent.TimeUnit.MINUTES;
import static java.util.concurrent.TimeUnit.SECONDS;
@@ -100,7 +99,7 @@ public class Expedition {
private final boolean silent;
private final int minSize;
private final int maxSize;
private final MonitoredReentrantLock pL = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EIM_PARTY, true);
private final Lock pL = new ReentrantLock(true);
public Expedition(Character player, ExpeditionType met, boolean sil, int minPlayers, int maxPlayers) {
leader = player;

View File

@@ -29,10 +29,6 @@ import config.YamlConfig;
import constants.id.MobId;
import constants.skills.*;
import net.packet.Packet;
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.coordinator.world.MonsterAggroCoordinator;
import net.server.services.task.channel.MobAnimationService;
@@ -101,7 +97,7 @@ public class Monster extends AbstractLoadedLife {
private boolean availablePuppetUpdate = true;
private final Lock externalLock = new ReentrantLock();
private MonitoredReentrantLock monsterLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB, true);
private final Lock monsterLock = new ReentrantLock(true);
private final Lock statiLock = new ReentrantLock();
private final Lock animationLock = new ReentrantLock();
private final Lock aggroUpdateLock = new ReentrantLock();
@@ -2197,14 +2193,5 @@ public class Monster extends AbstractLoadedLife {
}
this.getMap().dismissRemoveAfter(this);
disposeLocks();
}
private void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
}
private void emptyLocks() {
monsterLock = monsterLock.dispose();
}
}

View File

@@ -25,13 +25,12 @@ import client.Character;
import client.Client;
import constants.game.GameConstants;
import constants.id.MapId;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReentrantLock;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import scripting.portal.PortalScriptManager;
import tools.PacketCreator;
import java.awt.*;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class GenericPortal implements Portal {
private String name;
@@ -43,7 +42,7 @@ public class GenericPortal implements Portal {
private int id;
private String scriptName;
private boolean portalState;
private MonitoredReentrantLock scriptLock = null;
private Lock scriptLock = null;
public GenericPortal(int type) {
this.type = type;
@@ -120,7 +119,7 @@ public class GenericPortal implements Portal {
if (scriptName != null) {
if (scriptLock == null) {
scriptLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.PORTAL, true);
scriptLock = new ReentrantLock(true);
}
} else {
scriptLock = null;

View File

@@ -33,8 +33,6 @@ import client.processor.npc.FredrickProcessor;
import config.YamlConfig;
import net.packet.Packet;
import net.server.Server;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import server.ItemInformationProvider;
import server.Trade;
import tools.DatabaseConnection;
@@ -50,6 +48,7 @@ import java.time.Instant;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author XoticStory
@@ -76,7 +75,7 @@ public class HiredMerchant extends AbstractMapObject {
private final Visitor[] visitors = new Visitor[3];
private final LinkedList<PastVisitor> visitorHistory = new LinkedList<>();
private final LinkedHashSet<String> blacklist = new LinkedHashSet<>(); // case-sensitive character names
private final Lock visitorLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.VISITOR_MERCH, true);
private final Lock visitorLock = new ReentrantLock(true);
private record Visitor(Character chr, Instant enteredAt) {}

View File

@@ -20,8 +20,6 @@
package server.maps;
import client.Character;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import server.TimerManager;
import tools.PacketCreator;
@@ -29,6 +27,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import static java.util.concurrent.TimeUnit.SECONDS;
@@ -38,7 +37,7 @@ import static java.util.concurrent.TimeUnit.SECONDS;
public class MiniDungeon {
List<Character> players = new ArrayList<>();
ScheduledFuture<?> timeoutTask = null;
Lock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MINIDUNGEON, true);
private final Lock lock = new ReentrantLock(true);
int baseMap;
long expireTime;

View File

@@ -29,8 +29,6 @@ import client.inventory.Item;
import client.inventory.manipulator.InventoryManipulator;
import client.inventory.manipulator.KarmaManipulator;
import net.packet.Packet;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import server.Trade;
import tools.PacketCreator;
import tools.Pair;
@@ -38,6 +36,7 @@ import tools.Pair;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author Matze
@@ -56,7 +55,7 @@ public class PlayerShop extends AbstractMapObject {
private final List<String> bannedList = new ArrayList<>();
private final List<Pair<Character, String>> chatLog = new LinkedList<>();
private final Map<Integer, Byte> chatSlot = new LinkedHashMap<>();
private final Lock visitorLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.VISITOR_PSHOP, true);
private final Lock visitorLock = new ReentrantLock(true);
public PlayerShop(Character owner, String description, int itemid) {
this.setPosition(owner.getPosition());

View File

@@ -24,8 +24,6 @@ package server.maps;
import client.Client;
import config.YamlConfig;
import net.packet.Packet;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import net.server.services.task.channel.OverallService;
import net.server.services.type.ChannelServices;
import scripting.reactor.ReactorScriptManager;
@@ -38,6 +36,7 @@ import java.awt.*;
import java.util.List;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author Lerk
@@ -58,8 +57,8 @@ public class Reactor extends AbstractMapObject {
private Runnable delayedRespawnRun = null;
private GuardianSpawnPoint guardian = null;
private byte facingDirection = 0;
private final Lock reactorLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.REACTOR, true);
private final Lock hitLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.REACTOR_HIT, true);
private final Lock reactorLock = new ReentrantLock(true);
private final Lock hitLock = new ReentrantLock(true);
public Reactor(ReactorStats stats, int rid) {
this.evstate = (byte) 0;