minimize the time we hold locks for and add sleep

This commit is contained in:
Maple 2026-04-25 15:23:53 +02:00
commit aaa530341d
2 changed files with 24 additions and 14 deletions

View file

@ -153,6 +153,7 @@ impl<C: Crypto> Server<C> {
} }
}); });
frag_num += 1; frag_num += 1;
sleep(Duration::from_millis(16)).await;
} }
drop(inner); drop(inner);
} }

View file

@ -31,6 +31,7 @@ use rnex_core::{
}, },
}; };
use std::sync::atomic::Ordering::Relaxed; use std::sync::atomic::Ordering::Relaxed;
use tokio::spawn;
use tokio::sync::RwLock; use tokio::sync::RwLock;
use rnex_core::rmc::protocols::friends::{GameKey, MiiV2, PrincipalBasicInfo}; use rnex_core::rmc::protocols::friends::{GameKey, MiiV2, PrincipalBasicInfo};
@ -186,32 +187,40 @@ impl Friends for FriendsUser {
println!("acquiring user and current friends locks"); println!("acquiring user and current friends locks");
let users = self.fm.users.read().await; let users = self.fm.users.read().await;
let mut curr_friends = self.current_friends.write().await;
println!("started summing users"); println!("started summing users");
for u in users.deref().iter().filter_map(|u| u.upgrade()) { for u in users.deref().iter().filter_map(|u| u.upgrade()) {
let data = u.data.read().await; let data = u.data.read().await;
let Some(data) = data.as_ref() else { let Some(inner_data) = data.as_ref() else {
continue; continue;
}; };
fr_list.push(friend_info_from_user(&inner_data));
drop(data);
let mut curr_friends = self.current_friends.write().await;
curr_friends.push(u.pid);
drop(curr_friends);
let mut fr = u.current_friends.write().await; let mut fr = u.current_friends.write().await;
if !fr.contains(&self.pid) { if !fr.contains(&self.pid) {
fr.push(self.pid); fr.push(self.pid);
u.remote drop(fr);
.process_nintendo_notification_event_1(NintendoNotificationEvent { let data = any_self_fr_info.clone();
event_type: 30, let u = u.clone();
sender: self.pid, let sender = self.pid;
data: any_self_fr_info.clone(), spawn(async move {
}) u.remote
.await; .process_nintendo_notification_event_1(NintendoNotificationEvent {
event_type: 30,
sender,
data,
})
.await;
});
} else {
drop(fr);
} }
drop(fr);
fr_list.push(friend_info_from_user(&data));
curr_friends.push(u.pid);
} }
println!("finished summing users"); println!("finished summing users");
drop(curr_friends);
drop(users); drop(users);
println!("adding self to users"); println!("adding self to users");