diff --git a/CHANGELOG.md b/CHANGELOG.md index d7f164f0d4..f0a7b70b17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -75,6 +75,7 @@ By @brodycj in [#6924](https://github.com/gfx-rs/wgpu/pull/6924). - Fix `wgpu` not building with `--no-default-features` on when targeting `wasm32-unknown-unknown`. By @wumpf in [#6946](https://github.com/gfx-rs/wgpu/pull/6946). - Fix `CopyExternalImageDestInfo` not exported on `wgpu`. By @wumpf in [#6962](https://github.com/gfx-rs/wgpu/pull/6962). - Fix drop order in `Surface`. By @ed-2100 in [#6997](https://github.com/gfx-rs/wgpu/pull/6997) +- Fix a possible deadlock within `Queue::write_texture`. By @metamuffin in [#7004](https://github.com/gfx-rs/wgpu/pull/7004) #### Vulkan diff --git a/wgpu-core/src/device/queue.rs b/wgpu-core/src/device/queue.rs index ded2de8d5e..e4211ef2f0 100644 --- a/wgpu-core/src/device/queue.rs +++ b/wgpu-core/src/device/queue.rs @@ -697,6 +697,8 @@ impl Queue { .map_err(TransferError::from)?; } + let snatch_guard = self.device.snatchable_lock.read(); + let mut pending_writes = self.pending_writes.lock(); let encoder = pending_writes.activate(); @@ -732,7 +734,7 @@ impl Queue { &mut trackers.textures, &self.device.alignments, self.device.zero_buffer.as_ref(), - &self.device.snatchable_lock.read(), + &snatch_guard, ) .map_err(QueueWriteError::from)?; } @@ -742,8 +744,6 @@ impl Queue { } } - let snatch_guard = self.device.snatchable_lock.read(); - let dst_raw = dst.try_raw(&snatch_guard)?; let (block_width, block_height) = dst.desc.format.block_dimensions();