From b4ae5d266396109f4662bae2325acf2765adf621 Mon Sep 17 00:00:00 2001 From: fqwert Date: Sat, 1 Jun 2024 15:52:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E7=94=A8=E6=88=B7=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=88=87=E5=90=8E=E5=8F=B0bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: fqwert Change-Id: I487305730716b263f75f5941107e53e7e69c494a --- etc/sa_profile/3706.json | 3 +++ services/src/manage/account.rs | 21 +++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/etc/sa_profile/3706.json b/etc/sa_profile/3706.json index 2b04dae4..faed4c4d 100644 --- a/etc/sa_profile/3706.json +++ b/etc/sa_profile/3706.json @@ -18,6 +18,9 @@ }, { "name": "usual.event.USER_SWITCHED" + }, + { + "name": "usual.event.USER_STOPPED" } ] } diff --git a/services/src/manage/account.rs b/services/src/manage/account.rs index eb737739..9565adad 100644 --- a/services/src/manage/account.rs +++ b/services/src/manage/account.rs @@ -25,6 +25,7 @@ use crate::manage::task_manager::TaskManagerTx; pub(crate) enum AccountEvent { Switch, Active, + Stop, Remove(i32), } @@ -81,9 +82,8 @@ impl TaskManager { pub(crate) async fn handle_account_event(&mut self, event: AccountEvent) { update_accounts(); match event { - AccountEvent::Active => self.scheduler.on_user_change().await, - AccountEvent::Switch => self.scheduler.on_user_change().await, AccountEvent::Remove(user_id) => remove_account_tasks(user_id), + _ => self.scheduler.on_user_change().await, } } } @@ -171,7 +171,7 @@ pub(crate) fn registry_account_subscribe(task_manager: TaskManagerTx) { let ret = RegistryAccountSubscriber( OS_ACCOUNT_SUBSCRIBE_TYPE::REMOVED, - Box::new(task_manager), + Box::new(task_manager.clone()), |id, task_manager| { task_manager.send_event(TaskManagerEvent::Account(AccountEvent::Remove(*id))); }, @@ -179,6 +179,19 @@ pub(crate) fn registry_account_subscribe(task_manager: TaskManagerTx) { ); if ret != 0 { - error!("registry_account_active_subscribe failed: {}", ret); + error!("registry_account_remove_subscribe failed: {}", ret); + } + + let ret = RegistryAccountSubscriber( + OS_ACCOUNT_SUBSCRIBE_TYPE::STOPPED, + Box::new(task_manager), + |_id, task_manager| { + task_manager.send_event(TaskManagerEvent::Account(AccountEvent::Stop)); + }, + |_, _, _| {}, + ); + + if ret != 0 { + error!("registry_account_stop_subscribe failed: {}", ret); } }