mirror of
https://github.com/PaperMC/Waterfall.git
synced 2024-11-24 19:25:16 +01:00
Since servers is mutable, lock on another Object: serversLock (#42)
* Since servers is mutable, lock on another Object: serversLock * Make serversLock final
This commit is contained in:
parent
d024f19ba5
commit
1e2071e6a8
@ -1,6 +1,6 @@
|
||||
From f003385fe169b5be68b0acdf41a82a55f4140fb8 Mon Sep 17 00:00:00 2001
|
||||
From d7d5585dd6576c5ee2d50c88f5b020ab96726138 Mon Sep 17 00:00:00 2001
|
||||
From: Troy Frew <fuzzy_bot@arenaga.me>
|
||||
Date: Tue, 28 Jun 2016 21:29:25 -0500
|
||||
Date: Wed, 29 Jun 2016 04:29:25 +0200
|
||||
Subject: [PATCH] Add dynamic server addition/removal api.
|
||||
|
||||
The provided methods will not move a player if a server is removed or the server ip/port is changed, however the methods return the old ServerInfo object for you to handle that yourself if needed.
|
||||
@ -168,7 +168,7 @@ index fc5ca3a..92ea9b5 100644
|
||||
|
||||
@Override
|
||||
diff --git a/proxy/src/main/java/net/md_5/bungee/conf/Configuration.java b/proxy/src/main/java/net/md_5/bungee/conf/Configuration.java
|
||||
index db9ebbd..112420a 100644
|
||||
index db9ebbd..4d16fa3 100644
|
||||
--- a/proxy/src/main/java/net/md_5/bungee/conf/Configuration.java
|
||||
+++ b/proxy/src/main/java/net/md_5/bungee/conf/Configuration.java
|
||||
@@ -1,6 +1,7 @@
|
||||
@ -187,15 +187,23 @@ index db9ebbd..112420a 100644
|
||||
|
||||
import net.md_5.bungee.BungeeCord;
|
||||
import net.md_5.bungee.api.Favicon;
|
||||
@@ -61,6 +63,7 @@ public abstract class Configuration implements ProxyConfig
|
||||
@@ -42,6 +44,7 @@ public abstract class Configuration implements ProxyConfig
|
||||
* Set of all listeners.
|
||||
*/
|
||||
private Collection<ListenerInfo> listeners;
|
||||
+ private final Object serversLock = new Object(); // Waterfall
|
||||
/**
|
||||
* Set of all servers.
|
||||
*/
|
||||
@@ -61,6 +64,7 @@ public abstract class Configuration implements ProxyConfig
|
||||
private Favicon favicon;
|
||||
private int compressionThreshold = 256;
|
||||
|
||||
+ @Synchronized("servers") // Waterfall
|
||||
+ @Synchronized("serversLock") // Waterfall
|
||||
public void load()
|
||||
{
|
||||
ConfigurationAdapter adapter = ProxyServer.getInstance().getConfigurationAdapter();
|
||||
@@ -100,7 +103,7 @@ public abstract class Configuration implements ProxyConfig
|
||||
@@ -100,7 +104,7 @@ public abstract class Configuration implements ProxyConfig
|
||||
servers = new CaseInsensitiveMap<>( newServers );
|
||||
} else
|
||||
{
|
||||
@ -204,34 +212,34 @@ index db9ebbd..112420a 100644
|
||||
this.servers = new CaseInsensitiveMap<>(newServers);
|
||||
|
||||
for ( ServerInfo oldServer : oldServers.values() )
|
||||
@@ -158,4 +161,71 @@ public abstract class Configuration implements ProxyConfig
|
||||
@@ -158,4 +162,71 @@ public abstract class Configuration implements ProxyConfig
|
||||
{
|
||||
return favicon;
|
||||
}
|
||||
+
|
||||
+ // Waterfall start
|
||||
+ @Override
|
||||
+ @Synchronized("servers")
|
||||
+ @Synchronized("serversLock")
|
||||
+ public Map<String, ServerInfo> getServersCopy() {
|
||||
+ return ImmutableMap.copyOf( servers );
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ @Synchronized("servers")
|
||||
+ @Synchronized("serversLock")
|
||||
+ public ServerInfo getServerInfo(String name)
|
||||
+ {
|
||||
+ return this.servers.get( name );
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ @Synchronized("servers")
|
||||
+ @Synchronized("serversLock")
|
||||
+ public ServerInfo addServer(ServerInfo server)
|
||||
+ {
|
||||
+ return this.servers.put( server.getName(), server );
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ @Synchronized("servers")
|
||||
+ @Synchronized("serversLock")
|
||||
+ public boolean addServers(Collection<ServerInfo> servers)
|
||||
+ {
|
||||
+ boolean changed = false;
|
||||
@ -243,28 +251,28 @@ index db9ebbd..112420a 100644
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ @Synchronized("servers")
|
||||
+ @Synchronized("serversLock")
|
||||
+ public ServerInfo removeServerNamed(String name)
|
||||
+ {
|
||||
+ return this.servers.remove( name );
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ @Synchronized("servers")
|
||||
+ @Synchronized("serversLock")
|
||||
+ public ServerInfo removeServer(ServerInfo server)
|
||||
+ {
|
||||
+ return this.servers.remove( server.getName() );
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ @Synchronized("servers")
|
||||
+ @Synchronized("serversLock")
|
||||
+ public boolean removeServersNamed(Collection<String> names)
|
||||
+ {
|
||||
+ return this.servers.keySet().removeAll( names );
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ @Synchronized("servers")
|
||||
+ @Synchronized("serversLock")
|
||||
+ public boolean removeServers(Collection<ServerInfo> servers)
|
||||
+ {
|
||||
+ boolean changed = false;
|
||||
@ -277,5 +285,5 @@ index db9ebbd..112420a 100644
|
||||
+ // Waterfall end
|
||||
}
|
||||
--
|
||||
2.7.4 (Apple Git-66)
|
||||
2.9.0.windows.1
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user