File tree Expand file tree Collapse file tree 1 file changed +14
-5
lines changed Expand file tree Collapse file tree 1 file changed +14
-5
lines changed Original file line number Diff line number Diff line change @@ -258,14 +258,23 @@ impl RustfixDiagnosticServer {
258
258
259
259
fn run ( self , on_message : & dyn Fn ( Message ) , done : & AtomicBool ) {
260
260
while let Ok ( ( client, _) ) = self . listener . accept ( ) {
261
- let client = BufReader :: new ( client) ;
262
- match serde_json:: from_reader ( client) {
263
- Ok ( message) => on_message ( message) ,
264
- Err ( e) => warn ! ( "invalid diagnostics message: {}" , e) ,
265
- }
266
261
if done. load ( Ordering :: SeqCst ) {
267
262
break ;
268
263
}
264
+ let mut client = BufReader :: new ( client) ;
265
+ let mut s = String :: new ( ) ;
266
+ if let Err ( e) = client. read_to_string ( & mut s) {
267
+ warn ! ( "diagnostic server failed to read: {}" , e) ;
268
+ } else {
269
+ match serde_json:: from_str ( & s) {
270
+ Ok ( message) => on_message ( message) ,
271
+ Err ( e) => warn ! ( "invalid diagnostics message: {}" , e) ,
272
+ }
273
+ }
274
+ // The client should be kept alive until after `on_message` is
275
+ // called to ensure that the client doesn't exit too soon (and
276
+ // Message::Finish getting posted before Message::FixDiagnostic).
277
+ drop ( client) ;
269
278
}
270
279
}
271
280
}
You can’t perform that action at this time.
0 commit comments