Fixed server freezing on dispose(), socket in use exception
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
#Autogenerated file. Do not modify.
|
#Autogenerated file. Do not modify.
|
||||||
#Tue Mar 06 23:17:50 EST 2018
|
#Tue Mar 06 23:33:29 EST 2018
|
||||||
version=release
|
version=release
|
||||||
androidBuildCode=337
|
androidBuildCode=337
|
||||||
name=Mindustry
|
name=Mindustry
|
||||||
|
|||||||
@@ -184,26 +184,20 @@ public class KryoServer implements ServerProvider {
|
|||||||
connections.clear();
|
connections.clear();
|
||||||
lastconnection = 0;
|
lastconnection = 0;
|
||||||
|
|
||||||
Thread thread = new Thread(() -> {
|
async(server::close);
|
||||||
|
async(() -> {
|
||||||
try {
|
try {
|
||||||
server.close();
|
if (webServer != null) webServer.stop(1);
|
||||||
try {
|
|
||||||
if (webServer != null) webServer.stop(1);
|
|
||||||
}catch(Exception e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
//kill them all
|
//kill them all
|
||||||
for(Thread worker : Thread.getAllStackTraces().keySet()){
|
for (Thread worker : Thread.getAllStackTraces().keySet()) {
|
||||||
if(worker.getName().contains("WebSocketWorker")){
|
if (worker.getName().contains("WebSocketWorker")) {
|
||||||
worker.interrupt();
|
worker.interrupt();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
Gdx.app.postRunnable(() -> {throw new RuntimeException(e);});
|
handleException(e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
thread.setDaemon(true);
|
|
||||||
thread.start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -291,25 +285,7 @@ public class KryoServer implements ServerProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void dispose(){
|
public void dispose(){
|
||||||
try {
|
close();
|
||||||
if(serverThread != null) serverThread.interrupt();
|
|
||||||
server.dispose();
|
|
||||||
}catch (Exception e){
|
|
||||||
Log.err(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
if(webServer != null) webServer.stop(1);
|
|
||||||
//kill them all
|
|
||||||
for(Thread thread : Thread.getAllStackTraces().keySet()){
|
|
||||||
if(thread.getName().contains("WebSocketWorker")){
|
|
||||||
thread.interrupt();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}catch (Exception e){
|
|
||||||
Log.err(e);
|
|
||||||
}
|
|
||||||
Log.info("Disposed server.");
|
Log.info("Disposed server.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -339,25 +315,10 @@ public class KryoServer implements ServerProvider {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
void throwErrorAndExit(){
|
void async(Runnable run){
|
||||||
Log.err("KRYONET CONNECTIONS:");
|
Thread thread = new Thread(run);
|
||||||
for(Connection c : server.getConnections()){
|
thread.setDaemon(true);
|
||||||
NetConnection k = getByKryoID(c.getID());
|
thread.start();
|
||||||
Log.err(" - Kryonet connection / ID {0} / IP {1} / NetConnection ID {2}",
|
|
||||||
c.getID(), c.getRemoteAddressTCP().getAddress().getHostAddress(), k == null ? "NOT FOUND" : k.id);
|
|
||||||
}
|
|
||||||
Log.err("NET CONNECTIONS:");
|
|
||||||
for(NetConnection c : connections){
|
|
||||||
Log.err(" - NetConnection / ID {0} / IP {1}", c.id, c.address);
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.err("\nSTACK TRACE:");
|
|
||||||
|
|
||||||
StackTraceElement[] e = Thread.getAllStackTraces().get(Thread.currentThread());
|
|
||||||
for(StackTraceElement s : e){
|
|
||||||
Log.err("- {0}", s);
|
|
||||||
}
|
|
||||||
System.exit(-1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class KryoConnection extends NetConnection{
|
class KryoConnection extends NetConnection{
|
||||||
|
|||||||
Reference in New Issue
Block a user