(&mut self)
| 658 | |
| 659 | #[instrument(skip(self), fields(guild_id = self.guild_id.get()))] |
| 660 | pub(crate) async fn shutdown(&mut self) { |
| 661 | info!("shutting down guild handler"); |
| 662 | |
| 663 | { |
| 664 | let Some(session) = &mut self.session else { |
| 665 | return; |
| 666 | }; |
| 667 | |
| 668 | // wait until the vm has finished its work |
| 669 | if session.send_complete().is_err() { |
| 670 | self.discard_broken_session().await; |
| 671 | return; |
| 672 | } |
| 673 | } |
| 674 | |
| 675 | while let Some(session) = &mut self.session { |
| 676 | let msg = session.recv().await; |
| 677 | let events = session |
| 678 | .handle_worker_msg(msg) |
| 679 | .into_iter() |
| 680 | // we asked the vm to shut down, keep the worker claimed until |
| 681 | // the shutdown message arrives instead of returning it on idle |
| 682 | .filter(|evt| !matches!(evt, SessionEvent::VmIdle)) |
| 683 | .collect(); |
| 684 | |
| 685 | self.handle_session_events(events).await; |
| 686 | } |
| 687 | } |
| 688 | |
| 689 | async fn fetch_premium_tier(&mut self) { |
| 690 | self.premium_tier = PremiumTierState::Unknown; |
no test coverage detected