no more access violation from freeing already freed memory

This commit is contained in:
minjaesong
2019-06-08 03:29:38 +09:00
parent 15cb42e26b
commit 30ae587554
3 changed files with 11 additions and 2 deletions

View File

@@ -82,6 +82,10 @@ open class IngameInstance(val batch: SpriteBatch) : Screen {
*/
override fun dispose() {
printdbg(this, "Thank you for properly disposing the world!")
printdbg(this, "dispose called by")
Thread.currentThread().stackTrace.forEach {
printdbg(this, "--> $it")
}
world.dispose()
}

View File

@@ -321,6 +321,7 @@ class TitleScreen(val batch: SpriteBatch) : Screen {
override fun dispose() {
logo.texture.dispose()
uiMenu.dispose()
demoWorld.dispose()
}

View File

@@ -16,6 +16,7 @@ open class BlockLayer(val width: Int, val height: Int) : Disposable {
unsafe = unsafeConstructor.newInstance()
}
private var unsafeArrayInitialised = false
private var unsafeArrayDestroyed = false
private var layerPtr = unsafe.allocateMemory(width * height * BYTES_PER_BLOCK.toLong())
@@ -135,8 +136,11 @@ open class BlockLayer(val width: Int, val height: Int) : Disposable {
fun isInBound(x: Int, y: Int) = (x >= 0 && y >= 0 && x < width && y < height)
override fun dispose() {
unsafe.freeMemory(layerPtr)
printdbg(this, "BlockLayer successfully freed")
if (!unsafeArrayDestroyed) {
unsafe.freeMemory(layerPtr)
unsafeArrayDestroyed = true
printdbg(this, "BlockLayer successfully freed")
}
}
companion object {