Added try-catch to suppress errors when trying to release a ticket for a world that's currently being unloaded. Closes #710.

This commit is contained in:
Florian Nücke 2014-12-05 00:31:44 +01:00
parent 0ae0d5d67e
commit 2947ded770
2 changed files with 12 additions and 4 deletions

View File

@ -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()
}

View File

@ -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