فهرست منبع

Prevent librespot from panicking if server connection is lost.

Konstantin Seiler 4 سال پیش
والد
کامیت
b6c676ad60
2فایلهای تغییر یافته به همراه9 افزوده شده و 3 حذف شده
  1. 7 2
      core/src/session.rs
  2. 2 1
      src/main.rs

+ 7 - 2
core/src/session.rs

@@ -283,13 +283,18 @@ where
 
         loop {
             let (cmd, data) = match self.0.poll() {
-                Ok(Async::Ready(t)) => t,
+                Ok(Async::Ready(Some(t))) => t,
+                Ok(Async::Ready(None)) => {
+                    warn!("Connection to server closed.");
+                    session.shutdown();
+                    return Ok(Async::Ready(()));
+                },
                 Ok(Async::NotReady) => return Ok(Async::NotReady),
                 Err(e) => {
                     session.shutdown();
                     return Err(From::from(e));
                 }
-            }.expect("connection closed");
+            };
 
             session.dispatch(cmd, data);
         }

+ 2 - 1
src/main.rs

@@ -500,7 +500,8 @@ impl Future for Main {
                     if self.shutdown {
                         return Ok(Async::Ready(()));
                     } else {
-                        panic!("Spirc shut down unexpectedly");
+                        warn!("Spirc shut down unexpectedly");
+                        self.spirc_task = None;
                     }
                 }
             }