Fix: deadlock when removing player
This commit is contained in:
parent
3f2bbcc7f9
commit
3fb191fa37
@ -547,8 +547,11 @@ impl World {
|
|||||||
/// - This function assumes `broadcast_packet_expect` and `remove_entity` are defined elsewhere.
|
/// - This function assumes `broadcast_packet_expect` and `remove_entity` are defined elsewhere.
|
||||||
/// - The disconnect message sending is currently optional. Consider making it a configurable option.
|
/// - The disconnect message sending is currently optional. Consider making it a configurable option.
|
||||||
pub async fn remove_player(&self, player: &Player) {
|
pub async fn remove_player(&self, player: &Player) {
|
||||||
let mut current_players = self.current_players.lock().await;
|
self.current_players
|
||||||
current_players.remove(&player.gameprofile.id).unwrap();
|
.lock()
|
||||||
|
.await
|
||||||
|
.remove(&player.gameprofile.id)
|
||||||
|
.unwrap();
|
||||||
let uuid = player.gameprofile.id;
|
let uuid = player.gameprofile.id;
|
||||||
self.broadcast_packet_expect(
|
self.broadcast_packet_expect(
|
||||||
&[player.gameprofile.id],
|
&[player.gameprofile.id],
|
||||||
@ -562,7 +565,7 @@ impl World {
|
|||||||
let disconn_msg_txt = format!("{} left the game.", player.gameprofile.name.as_str());
|
let disconn_msg_txt = format!("{} left the game.", player.gameprofile.name.as_str());
|
||||||
let disconn_msg_cmp =
|
let disconn_msg_cmp =
|
||||||
TextComponent::text(disconn_msg_txt.as_str()).color_named(NamedColor::Yellow);
|
TextComponent::text(disconn_msg_txt.as_str()).color_named(NamedColor::Yellow);
|
||||||
for player in current_players.values() {
|
for player in self.current_players.lock().await.values() {
|
||||||
player.send_system_message(&disconn_msg_cmp).await;
|
player.send_system_message(&disconn_msg_cmp).await;
|
||||||
}
|
}
|
||||||
log::info!("{}", disconn_msg_cmp.to_pretty_console());
|
log::info!("{}", disconn_msg_cmp.to_pretty_console());
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user