mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-28 23:38:25 +01:00
Merge branch 'master' into pre/1.12
This commit is contained in:
commit
8fb32efc40
1 changed files with 60 additions and 57 deletions
|
@ -78,7 +78,7 @@ index 40514d042..f0743e6cc 100644
|
||||||
return this.serverThread;
|
return this.serverThread;
|
||||||
}
|
}
|
||||||
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
|
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
|
||||||
index bc2322e62..a43588598 100644
|
index 072de1f71..4483beeba 100644
|
||||||
--- a/src/main/java/net/minecraft/server/PlayerList.java
|
--- a/src/main/java/net/minecraft/server/PlayerList.java
|
||||||
+++ b/src/main/java/net/minecraft/server/PlayerList.java
|
+++ b/src/main/java/net/minecraft/server/PlayerList.java
|
||||||
@@ -0,0 +0,0 @@ public abstract class PlayerList {
|
@@ -0,0 +0,0 @@ public abstract class PlayerList {
|
||||||
|
@ -107,7 +107,7 @@ index bc2322e62..a43588598 100644
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
public void sendMessage(IChatBaseComponent[] iChatBaseComponents) {
|
public void sendMessage(IChatBaseComponent[] iChatBaseComponents) {
|
||||||
diff --git a/src/main/java/org/spigotmc/RestartCommand.java b/src/main/java/org/spigotmc/RestartCommand.java
|
diff --git a/src/main/java/org/spigotmc/RestartCommand.java b/src/main/java/org/spigotmc/RestartCommand.java
|
||||||
index 49768734d..e1bc3e64e 100644
|
index 49768734d..d51636c8e 100644
|
||||||
--- a/src/main/java/org/spigotmc/RestartCommand.java
|
--- a/src/main/java/org/spigotmc/RestartCommand.java
|
||||||
+++ b/src/main/java/org/spigotmc/RestartCommand.java
|
+++ b/src/main/java/org/spigotmc/RestartCommand.java
|
||||||
@@ -0,0 +0,0 @@ public class RestartCommand extends Command
|
@@ -0,0 +0,0 @@ public class RestartCommand extends Command
|
||||||
|
@ -115,8 +115,6 @@ index 49768734d..e1bc3e64e 100644
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
- if ( script.isFile() )
|
- if ( script.isFile() )
|
||||||
- {
|
|
||||||
- System.out.println( "Attempting to restart with " + SpigotConfig.restartScript );
|
|
||||||
+ // Paper - extract method and cleanup
|
+ // Paper - extract method and cleanup
|
||||||
+ boolean isRestarting = addShutdownHook(script);
|
+ boolean isRestarting = addShutdownHook(script);
|
||||||
+ if (isRestarting) {
|
+ if (isRestarting) {
|
||||||
|
@ -124,48 +122,17 @@ index 49768734d..e1bc3e64e 100644
|
||||||
+ } else {
|
+ } else {
|
||||||
+ System.out.println( "Startup script '" + SpigotConfig.restartScript + "' does not exist! Stopping server." );
|
+ System.out.println( "Startup script '" + SpigotConfig.restartScript + "' does not exist! Stopping server." );
|
||||||
+ }
|
+ }
|
||||||
|
+
|
||||||
- // Disable Watchdog
|
|
||||||
- WatchdogThread.doStop();
|
|
||||||
+ // Stop the watchdog
|
+ // Stop the watchdog
|
||||||
+ WatchdogThread.doStop();
|
+ WatchdogThread.doStop();
|
||||||
|
+
|
||||||
- // Kick all players
|
|
||||||
- for ( EntityPlayer p : (List< EntityPlayer>) MinecraftServer.getServer().getPlayerList().players )
|
|
||||||
- {
|
|
||||||
- p.playerConnection.disconnect(SpigotConfig.restartMessage);
|
|
||||||
- }
|
|
||||||
- // Give the socket a chance to send the packets
|
|
||||||
- try
|
|
||||||
- {
|
|
||||||
- Thread.sleep( 100 );
|
|
||||||
- } catch ( InterruptedException ex )
|
|
||||||
- {
|
|
||||||
- }
|
|
||||||
- // Close the socket so we can rebind with the new process
|
|
||||||
- MinecraftServer.getServer().getServerConnection().b();
|
|
||||||
-
|
|
||||||
- // Give time for it to kick in
|
|
||||||
- try
|
|
||||||
- {
|
|
||||||
- Thread.sleep( 100 );
|
|
||||||
- } catch ( InterruptedException ex )
|
|
||||||
- {
|
|
||||||
- }
|
|
||||||
+ shutdownServer(isRestarting);
|
+ shutdownServer(isRestarting);
|
||||||
+ } catch ( Exception ex )
|
+ } catch ( Exception ex )
|
||||||
+ {
|
+ {
|
||||||
+ ex.printStackTrace();
|
+ ex.printStackTrace();
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
|
+
|
||||||
- // Actually shutdown
|
|
||||||
- try
|
|
||||||
- {
|
|
||||||
- MinecraftServer.getServer().stop();
|
|
||||||
- } catch ( Throwable t )
|
|
||||||
- {
|
|
||||||
- }
|
|
||||||
+ // Paper start - sync copied from above with minor changes, async added
|
+ // Paper start - sync copied from above with minor changes, async added
|
||||||
+ private static void shutdownServer(boolean isRestarting)
|
+ private static void shutdownServer(boolean isRestarting)
|
||||||
+ {
|
+ {
|
||||||
|
@ -181,9 +148,58 @@ index 49768734d..e1bc3e64e 100644
|
||||||
+ {
|
+ {
|
||||||
+ Thread.sleep( 100 );
|
+ Thread.sleep( 100 );
|
||||||
+ } catch ( InterruptedException ex )
|
+ } catch ( InterruptedException ex )
|
||||||
|
{
|
||||||
|
- System.out.println( "Attempting to restart with " + SpigotConfig.restartScript );
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- // Disable Watchdog
|
||||||
|
- WatchdogThread.doStop();
|
||||||
|
+ closeSocket();
|
||||||
|
|
||||||
|
- // Kick all players
|
||||||
|
- for ( EntityPlayer p : (List< EntityPlayer>) MinecraftServer.getServer().getPlayerList().players )
|
||||||
|
- {
|
||||||
|
- p.playerConnection.disconnect(SpigotConfig.restartMessage);
|
||||||
|
- }
|
||||||
|
- // Give the socket a chance to send the packets
|
||||||
|
- try
|
||||||
|
- {
|
||||||
|
- Thread.sleep( 100 );
|
||||||
|
- } catch ( InterruptedException ex )
|
||||||
|
- {
|
||||||
|
- }
|
||||||
|
- // Close the socket so we can rebind with the new process
|
||||||
|
- MinecraftServer.getServer().getServerConnection().b();
|
||||||
|
+ // Actually shutdown
|
||||||
|
+ try
|
||||||
|
+ {
|
||||||
|
+ MinecraftServer.getServer().stop();
|
||||||
|
+ } catch ( Throwable t )
|
||||||
+ {
|
+ {
|
||||||
+ }
|
+ }
|
||||||
|
|
||||||
|
- // Give time for it to kick in
|
||||||
|
- try
|
||||||
|
- {
|
||||||
|
- Thread.sleep( 100 );
|
||||||
|
- } catch ( InterruptedException ex )
|
||||||
|
- {
|
||||||
|
- }
|
||||||
|
+ // Actually stop the JVM
|
||||||
|
+ System.exit(0);
|
||||||
|
|
||||||
|
- // Actually shutdown
|
||||||
|
- try
|
||||||
|
- {
|
||||||
|
- MinecraftServer.getServer().stop();
|
||||||
|
- } catch ( Throwable t )
|
||||||
|
- {
|
||||||
|
- }
|
||||||
|
+ } else
|
||||||
|
+ {
|
||||||
|
+ // Mark the server to shutdown at the end of the tick
|
||||||
|
+ MinecraftServer.getServer().safeShutdown(isRestarting);
|
||||||
|
|
||||||
- // This will be done AFTER the server has completely halted
|
- // This will be done AFTER the server has completely halted
|
||||||
- Thread shutdownHook = new Thread()
|
- Thread shutdownHook = new Thread()
|
||||||
- {
|
- {
|
||||||
|
@ -209,24 +225,19 @@ index 49768734d..e1bc3e64e 100644
|
||||||
- }
|
- }
|
||||||
- }
|
- }
|
||||||
- };
|
- };
|
||||||
+ closeSocket();
|
|
||||||
|
|
||||||
- shutdownHook.setDaemon( true );
|
- shutdownHook.setDaemon( true );
|
||||||
- Runtime.getRuntime().addShutdownHook( shutdownHook );
|
- Runtime.getRuntime().addShutdownHook( shutdownHook );
|
||||||
- } else
|
- } else
|
||||||
+ // Actually shutdown
|
+ // wait 10 seconds to see if we're actually going to try shutdown
|
||||||
+ try
|
+ try
|
||||||
|
+ {
|
||||||
|
+ Thread.sleep(10000);
|
||||||
|
+ }
|
||||||
|
+ catch (InterruptedException ignored)
|
||||||
{
|
{
|
||||||
- System.out.println( "Startup script '" + SpigotConfig.restartScript + "' does not exist! Stopping server." );
|
- System.out.println( "Startup script '" + SpigotConfig.restartScript + "' does not exist! Stopping server." );
|
||||||
+ MinecraftServer.getServer().stop();
|
-
|
||||||
+ } catch ( Throwable t )
|
|
||||||
+ {
|
|
||||||
+ }
|
|
||||||
+ } else
|
|
||||||
+ {
|
|
||||||
+ // Mark the server to shutdown at the end of the tick
|
|
||||||
+ MinecraftServer.getServer().safeShutdown(isRestarting);
|
|
||||||
|
|
||||||
- // Actually shutdown
|
- // Actually shutdown
|
||||||
- try
|
- try
|
||||||
- {
|
- {
|
||||||
|
@ -234,14 +245,6 @@ index 49768734d..e1bc3e64e 100644
|
||||||
- } catch ( Throwable t )
|
- } catch ( Throwable t )
|
||||||
- {
|
- {
|
||||||
- }
|
- }
|
||||||
+
|
|
||||||
+ // wait 10 seconds to see if we're actually going to try shutdown
|
|
||||||
+ try
|
|
||||||
+ {
|
|
||||||
+ Thread.sleep(10000);
|
|
||||||
+ }
|
|
||||||
+ catch (InterruptedException ignored)
|
|
||||||
+ {
|
|
||||||
}
|
}
|
||||||
+
|
+
|
||||||
+ // Check if we've actually hit a state where the server is going to safely shutdown
|
+ // Check if we've actually hit a state where the server is going to safely shutdown
|
||||||
|
|
Loading…
Reference in a new issue