From 2614efba7c69fd43abc54b033ba4657169ec3102 Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Wed, 29 May 2019 13:33:55 -0400 Subject: [PATCH] Protect mapped buffers from early destruction --- wgpu-native/src/device.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/wgpu-native/src/device.rs b/wgpu-native/src/device.rs index e0dc1db4a3..84ec8bae5f 100644 --- a/wgpu-native/src/device.rs +++ b/wgpu-native/src/device.rs @@ -242,6 +242,9 @@ impl PendingResources { ); let (life_guard, resource) = match resource_id { ResourceId::Buffer(id) => { + if HUB.buffers.read()[id].pending_map_operation.is_some() { + continue + } trackers.buffers.remove(id); let buf = HUB.buffers.unregister(id); (buf.life_guard, NativeResource::Buffer(buf.raw, buf.memory)) @@ -345,14 +348,14 @@ impl PendingResources { .drain(..) .map(|buffer_id| { let mut buffer_guard = HUB.buffers.write(); - let mut buffer = &mut buffer_guard[buffer_id]; + let buffer = &mut buffer_guard[buffer_id]; let operation = buffer.pending_map_operation.take().unwrap(); let result = match operation { BufferMapOperation::Read(ref range, ..) => { - map_buffer(raw, limits, &mut buffer, range, HostMap::Read) + map_buffer(raw, limits, buffer, range, HostMap::Read) } BufferMapOperation::Write(ref range, ..) => { - map_buffer(raw, limits, &mut buffer, range, HostMap::Write) + map_buffer(raw, limits, buffer, range, HostMap::Write) } }; (operation, result)