From 2947ded770168d87b86c10c236ca677817fc10fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 5 Dec 2014 00:31:44 +0100 Subject: [PATCH] Added try-catch to suppress errors when trying to release a ticket for a world that's currently being unloaded. Closes #710. --- .../oc/common/event/ChunkloaderUpgradeHandler.scala | 4 +++- .../cil/oc/server/component/UpgradeChunkloader.scala | 12 +++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/event/ChunkloaderUpgradeHandler.scala b/src/main/scala/li/cil/oc/common/event/ChunkloaderUpgradeHandler.scala index 574a4fdd1..785b253bc 100644 --- a/src/main/scala/li/cil/oc/common/event/ChunkloaderUpgradeHandler.scala +++ b/src/main/scala/li/cil/oc/common/event/ChunkloaderUpgradeHandler.scala @@ -40,7 +40,9 @@ object ChunkloaderUpgradeHandler extends LoadingCallback { // so if the save is because the game is being quit the tickets aren't // actually being cleared. This will *usually* not be a problem, but it // has room for improvement. - restoredTickets.values.foreach(ForgeChunkManager.releaseTicket) + restoredTickets.values.foreach(ticket => try ForgeChunkManager.releaseTicket(ticket) catch { + case _: Throwable => // Ignored. + }) restoredTickets.clear() } diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala b/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala index dc74d7763..7a1e0799a 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala @@ -27,7 +27,9 @@ class UpgradeChunkloader(val host: EnvironmentHost) extends prefab.ManagedEnviro super.update() if (host.world.getTotalWorldTime % Settings.get.tickFrequency == 0 && ticket.isDefined) { if (!node.tryChangeBuffer(-Settings.get.chunkloaderCost * Settings.get.tickFrequency)) { - ticket.foreach(ForgeChunkManager.releaseTicket) + ticket.foreach(ticket => try ForgeChunkManager.releaseTicket(ticket) catch { + case _: Throwable => // Ignored. + }) ticket = None } } @@ -54,7 +56,9 @@ class UpgradeChunkloader(val host: EnvironmentHost) extends prefab.ManagedEnviro override def onDisconnect(node: Node) { super.onDisconnect(node) if (node == this.node) { - ticket.foreach(ForgeChunkManager.releaseTicket) + ticket.foreach(ticket => try ForgeChunkManager.releaseTicket(ticket) catch { + case _: Throwable => // Ignored. + }) ticket = None } } @@ -75,7 +79,9 @@ class UpgradeChunkloader(val host: EnvironmentHost) extends prefab.ManagedEnviro ChunkloaderUpgradeHandler.updateLoadedChunk(this) } else if (!enabled && ticket.isDefined) { - ticket.foreach(ForgeChunkManager.releaseTicket) + ticket.foreach(ticket => try ForgeChunkManager.releaseTicket(ticket) catch { + case _: Throwable => // Ignored. + }) ticket = None } ticket.isDefined