@@ -4,6 +4,25 @@ use crate::BackendState;
44pub enum ExitTrigger {
55 ExitRequested ,
66 ExitFallback ,
7+ TrayQuit ,
8+ }
9+
10+ fn duplicate_cleanup_message ( trigger : ExitTrigger ) -> & ' static str {
11+ match trigger {
12+ ExitTrigger :: ExitRequested => "exit requested while backend cleanup is already running" ,
13+ ExitTrigger :: ExitFallback => {
14+ "exit fallback cleanup skipped: backend cleanup already running"
15+ }
16+ ExitTrigger :: TrayQuit => "tray quit while backend cleanup is already running" ,
17+ }
18+ }
19+
20+ fn stop_failure_prefix ( trigger : ExitTrigger ) -> & ' static str {
21+ match trigger {
22+ ExitTrigger :: ExitRequested => "backend graceful stop on ExitRequested failed" ,
23+ ExitTrigger :: ExitFallback => "backend fallback stop on Exit failed" ,
24+ ExitTrigger :: TrayQuit => "backend graceful stop on tray quit failed" ,
25+ }
726}
827
928pub fn try_begin_exit_cleanup < F > ( state : & BackendState , trigger : ExitTrigger , log : F ) -> bool
@@ -14,29 +33,41 @@ where
1433 return true ;
1534 }
1635
17- let message = match trigger {
18- ExitTrigger :: ExitRequested => "exit requested while backend cleanup is already running" ,
19- ExitTrigger :: ExitFallback => {
20- "exit fallback cleanup skipped: backend cleanup already running"
21- }
22- } ;
23- log ( message) ;
36+ log ( duplicate_cleanup_message ( trigger) ) ;
2437 false
2538}
2639
2740pub fn stop_backend_for_exit < F > ( state : & BackendState , trigger : ExitTrigger , log : F )
2841where
2942 F : Fn ( & str ) ,
3043{
31- let stop_failure_prefix = match trigger {
32- ExitTrigger :: ExitRequested => "backend graceful stop on ExitRequested failed" ,
33- ExitTrigger :: ExitFallback => "backend fallback stop on Exit failed" ,
34- } ;
44+ let failure_prefix = stop_failure_prefix ( trigger) ;
3545 if let Err ( error) = state. stop_backend ( ) {
36- log ( & format ! ( "{stop_failure_prefix }: {error}" ) ) ;
46+ log ( & format ! ( "{failure_prefix }: {error}" ) ) ;
3747 }
3848
39- if matches ! ( trigger, ExitTrigger :: ExitRequested ) {
49+ if matches ! ( trigger, ExitTrigger :: ExitRequested | ExitTrigger :: TrayQuit ) {
4050 log ( "backend stop finished, exiting desktop process" ) ;
4151 }
4252}
53+
54+ #[ cfg( test) ]
55+ mod tests {
56+ use super :: { duplicate_cleanup_message, ExitTrigger } ;
57+
58+ #[ test]
59+ fn duplicate_cleanup_message_describes_tray_quit_trigger ( ) {
60+ assert_eq ! (
61+ duplicate_cleanup_message( ExitTrigger :: TrayQuit ) ,
62+ "tray quit while backend cleanup is already running"
63+ ) ;
64+ }
65+
66+ #[ test]
67+ fn stop_failure_prefix_describes_tray_quit_trigger ( ) {
68+ assert_eq ! (
69+ super :: stop_failure_prefix( ExitTrigger :: TrayQuit ) ,
70+ "backend graceful stop on tray quit failed"
71+ ) ;
72+ }
73+ }
0 commit comments