in src/backend/mod.rs [2289:2324]
fn clear_if_all_idle_async(storage: &Arc<SharedStorage<T>>) {
let (queue, outstanding_element_count, generation) = {
let guard = storage.storage.lock().unwrap();
(
storage.queue.clone(),
guard.outstanding_element_count,
guard.generation,
)
};
if outstanding_element_count > 0 {
cubeb_log!(
"Not clearing shared voiceprocessing unit storage because {} elements are in use. Generation={}.",
outstanding_element_count,
generation
);
return;
}
cubeb_log!(
"Clearing shared voiceprocessing unit storage in {}s if still at generation {}.",
storage.idle_timeout.as_secs_f32(),
generation
);
let storage = storage.clone();
queue.run_after(Instant::now() + storage.idle_timeout, move || {
let mut guard = storage.storage.lock().unwrap();
if generation != guard.generation {
cubeb_log!(
"Not clearing shared voiceprocessing unit storage for generation {} as we're now at {}.",
generation,
guard.generation
);
return;
}
SharedStorage::clear_locked(&mut guard);
});
}