Allow dropping old muters.

This commit is contained in:
Your Name
2023-02-21 23:12:46 -05:00
parent 671814fc81
commit 45f8d9bd26
6 changed files with 115 additions and 37 deletions

View File

@@ -31,8 +31,8 @@ impl SMSessionNotifier {
) -> Arc<Mutex<Option<SMSessionNotifier>>> {
let session_notifier_arc: Arc<Mutex<Option<SMSessionNotifier>>> =
Arc::new(Mutex::new(None));
let sn2 = session_notifier_arc.clone();
let sn3 = session_notifier_arc.clone();
let sn2 = Arc::downgrade(&session_notifier_arc);
let sn3 = sn2.clone();
let notifier = SMSessionNotifier {
session_managers: Vec::new(),
device_enumerator: unsafe {
@@ -40,7 +40,7 @@ impl SMSessionNotifier {
},
device_notification_client: IMMNotificationClient::from(DeviceNotificationClient {
callback: Box::new(move |id| {
match sn2.lock().unwrap().as_mut().unwrap().add_device_by_id(id) {
match sn2.upgrade().unwrap().lock().unwrap().as_mut().unwrap().add_device_by_id(id) {
Ok(_) => {},
Err(e) => {
println!("Failed to add new device: {:?}", e);
@@ -50,13 +50,13 @@ impl SMSessionNotifier {
}),
session_notification: IAudioSessionNotification::from(SessionNotification {
callback: Box::new(move |session| {
(sn3.lock().unwrap().as_mut().unwrap().notification_function)(session)
(sn3.upgrade().unwrap().lock().unwrap().as_mut().unwrap().notification_function)(session)
}),
}),
notification_function: callback,
};
*session_notifier_arc.lock().unwrap() = Some(notifier);
return session_notifier_arc.clone();
return session_notifier_arc;
}
pub(crate) fn boot_devices(self: &mut SMSessionNotifier) -> Result<(), Box<dyn Error>> {