Skip to content

Commit

Permalink
wip acceleration structure drop memory leak fix
Browse files Browse the repository at this point in the history
  • Loading branch information
daniel-keitel committed Jun 27, 2023
1 parent 368e841 commit d02c99d
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions wgpu-core/src/device/ray_tracing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -285,12 +285,13 @@ impl<G: GlobalIdentityHandlerFactory> Global<G> {
let hub = A::hub(self);
let mut token = Token::root();

let (last_submit_index, device_id) = {
let (last_submit_index, device_id, ref_count) = {
let (mut blas_guard, _) = hub.blas_s.write(&mut token);
match blas_guard.get_mut(blas_id) {
Ok(blas) => {
let ref_count = blas.life_guard.ref_count.take().unwrap();
let last_submit_index = blas.life_guard.life_count();
(last_submit_index, blas.device_id.value)
(last_submit_index, blas.device_id.value, ref_count)
}
Err(crate::hub::InvalidId) => {
hub.blas_s.unregister_locked(blas_id, &mut *blas_guard);
Expand All @@ -302,6 +303,7 @@ impl<G: GlobalIdentityHandlerFactory> Global<G> {
let (device_guard, mut token) = hub.devices.read(&mut token);
let device = &device_guard[device_id];
{
drop(ref_count);
let mut life_lock = device.lock_life(&mut token);
life_lock
.suspected_resources
Expand Down Expand Up @@ -368,12 +370,13 @@ impl<G: GlobalIdentityHandlerFactory> Global<G> {
let hub = A::hub(self);
let mut token = Token::root();

let (last_submit_index, device_id) = {
let (last_submit_index, device_id, ref_count) = {
let (mut tlas_guard, _) = hub.tlas_s.write(&mut token);
match tlas_guard.get_mut(tlas_id) {
Ok(tlas) => {
let ref_count = tlas.life_guard.ref_count.take().unwrap();
let last_submit_index = tlas.life_guard.life_count();
(last_submit_index, tlas.device_id.value)
(last_submit_index, tlas.device_id.value, ref_count)
}
Err(crate::hub::InvalidId) => {
hub.tlas_s.unregister_locked(tlas_id, &mut *tlas_guard);
Expand All @@ -385,6 +388,7 @@ impl<G: GlobalIdentityHandlerFactory> Global<G> {
let (device_guard, mut token) = hub.devices.read(&mut token);
let device = &device_guard[device_id];
{
drop(ref_count);
let mut life_lock = device.lock_life(&mut token);
life_lock
.suspected_resources
Expand Down

0 comments on commit d02c99d

Please sign in to comment.