Просмотр исходного кода

darkirc: deathloop fix, clients(bots) closing unexpectly causing an unhandled read buffer of 0 to continue endlessly

dasman 1 год назад
Родитель
Сommit
2acd3c60bb
1 измененных файлов с 6 добавлено и 0 удалено
  1. 6 0
      bin/darkirc/src/irc/client.rs

+ 6 - 0
bin/darkirc/src/irc/client.rs

@@ -164,6 +164,12 @@ impl Client {
             futures::select! {
                 // Process message from the IRC client
                 r = reader.read_line(&mut line).fuse() => {
+                    // If client closed unexpectedly, we disconnect.
+                    if let Ok(0) = r {
+                        error!("[IRC CLIENT] Read failed for {}: Client disconnected", self.addr);
+                        self.incoming.unsubscribe().await;
+                        return Err(Error::ChannelStopped)
+                    }
                     // If something failed during reading, we disconnect.
                     if let Err(e) = r {
                         error!("[IRC CLIENT] Read failed for {}: {}", self.addr, e);