world renderer: fix some locking crashes

This commit is contained in:
Bixilon 2022-12-23 16:35:29 +01:00
parent b8ef770685
commit 6a5e9ab799
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
3 changed files with 7 additions and 0 deletions

View File

@ -88,14 +88,17 @@ class LoadedMeshes(
operator fun contains(position: ChunkPosition): Boolean {
renderer.lock.acquire()
lock.acquire()
val contains = position in this.meshes
lock.release()
renderer.lock.release()
return contains
}
fun collect(visible: VisibleMeshes) {
renderer.lock.acquire()
lock.acquire()
for ((chunkPosition, meshes) in this.meshes) {
if (!renderer.visibilityGraph.isChunkVisible(chunkPosition)) {
@ -111,6 +114,7 @@ class LoadedMeshes(
}
}
lock.release()
renderer.lock.release()
}
fun lock() {

View File

@ -81,6 +81,7 @@ class CulledQueue(
fun collect(): MutableList<Pair<Chunk, Int>> {
renderer.lock.acquire()
lock.acquire() // The queue method needs the full lock of the culledQueue
val world = renderer.world
@ -112,6 +113,7 @@ class CulledQueue(
world.chunks.lock.release()
lock.release()
renderer.lock.release()
return list

View File

@ -144,6 +144,7 @@ class ChunkMeshingQueue(
fun queue(item: WorldQueueItem) {
lock()
// TODO: don't remove and readd
if (set.remove(item)) {
queue -= item
}