Fix deadlock between snatchable_lock and trackers in Queue::write_texture (#7004)

* Fix deadlock between snatchable_lock and trackers in Queue::write_texture

* Fix another deadlock in write_texture between pending_writes and snatchable_lock.
This commit is contained in:
metamuffin
2025-01-27 18:01:57 +01:00
committed by GitHub
parent df54acc05d
commit 33e8df0f44
2 changed files with 4 additions and 3 deletions

View File

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

View File

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