@@ -41,12 +41,25 @@ pub fn notifications() -> Subscription<AppletEvent> {
41
41
42
42
std:: thread:: spawn ( move || -> anyhow:: Result < ( ) > {
43
43
let mut msg = String :: new ( ) ;
44
- std:: io:: stdin ( ) . read_line ( & mut msg) ?;
45
- let raw_fd = msg. trim ( ) . parse :: < RawFd > ( ) ?;
44
+
45
+ if let Err ( err) = std:: io:: stdin ( ) . read_line ( & mut msg) {
46
+ error ! ( "Failed to read line from panel: {}" , err) ;
47
+ anyhow:: bail!( "Failed to read line from panel" ) ;
48
+ }
49
+
50
+ info ! ( "Received fd from panel: {}" , msg) ;
51
+ let Ok ( raw_fd) = msg. trim ( ) . parse :: < RawFd > ( ) else {
52
+ error ! ( "Failed to parse fd from panel" ) ;
53
+ anyhow:: bail!( "Failed to parse fd from panel" ) ;
54
+ } ;
46
55
if raw_fd == 0 {
56
+ error ! ( "Invalid fd received from panel" ) ;
47
57
anyhow:: bail!( "Invalid fd received from panel" ) ;
48
58
}
49
- _ = tx. send ( raw_fd) ;
59
+ if let Err ( err) = tx. send ( raw_fd) {
60
+ error ! ( "Failed to send fd to main thread: {}" , err) ;
61
+ anyhow:: bail!( "Failed to send fd to main thread" ) ;
62
+ }
50
63
Ok ( ( ) )
51
64
} ) ;
52
65
@@ -122,6 +135,10 @@ pub fn notifications() -> Subscription<AppletEvent> {
122
135
123
136
let mut lines = reader. lines ( ) ;
124
137
while let Ok ( Some ( line) ) = lines. next_line ( ) . await {
138
+ if line. is_empty ( ) {
139
+ warn ! ( "Received empty line from notification stream. The notification daemon probably crashed, so we will exit." ) ;
140
+ std:: process:: exit ( 1 ) ;
141
+ }
125
142
if let Ok ( event) = ron:: de:: from_str :: < AppletEvent > ( line. as_str ( ) ) {
126
143
if let Err ( _err) = output. send ( event) . await {
127
144
error ! ( "Error sending event" ) ;
@@ -130,8 +147,8 @@ pub fn notifications() -> Subscription<AppletEvent> {
130
147
error ! ( "Failed to deserialize event from notification stream" ) ;
131
148
}
132
149
}
133
- warn ! ( "Notification stream closed" ) ;
134
- state = State :: Finished ;
150
+ warn ! ( "Notification stream closed. The notification daemon probably crashed, so we will exit. " ) ;
151
+ std :: process :: exit ( 1 ) ;
135
152
}
136
153
State :: Finished => {
137
154
let ( ) = futures:: future:: pending ( ) . await ;
0 commit comments