From 0e22678a281fca2b746c4f2210e905398c9e9415 Mon Sep 17 00:00:00 2001
From: Konstantin Seiler <list@kseiler.de>
Date: Thu, 23 Jan 2020 21:10:55 +1100
Subject: [PATCH] Workaround for Rust 1.33 borrow checker.

---
 src/main.rs | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index a4618572..e2c5f51e 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -502,6 +502,7 @@ impl Future for Main {
                 progress = true;
             }
 
+            let mut try_to_reconnect = false;
             if let Some(ref mut spirc_task) = self.spirc_task {
                 if let Async::Ready(()) = spirc_task.poll().unwrap() {
                     if self.shutdown {
@@ -510,22 +511,26 @@ impl Future for Main {
                         warn!("Spirc shut down unexpectedly");
                         self.spirc_task = None;
 
-                        while (!self.auto_connect_times.is_empty()) && ((Instant::now() - self.auto_connect_times[0]).as_secs() > 600) {
-                            let _ = self.auto_connect_times.remove(0);
-                        }
-
-                        if let Some(credentials) = self.last_credentials.clone() {
-                            if self.auto_connect_times.len() >= 5 {
-                                warn!("Spirc shut down too often. Not reconnecting automatically.");
-                            } else {
-                                self.auto_connect_times.push(Instant::now());
-                                self.credentials(credentials);
-                            }
-                        }
+                        try_to_reconnect = true;
                     }
                     progress = true;
                 }
             }
+            if try_to_reconnect {
+                while (!self.auto_connect_times.is_empty()) && ((Instant::now() - self.auto_connect_times[0]).as_secs() > 600) {
+                    let _ = self.auto_connect_times.remove(0);
+                }
+
+                if let Some(credentials) = self.last_credentials.clone() {
+                    if self.auto_connect_times.len() >= 5 {
+                        warn!("Spirc shut down too often. Not reconnecting automatically.");
+                    } else {
+                        self.auto_connect_times.push(Instant::now());
+                        self.credentials(credentials);
+                    }
+                }
+            }
+
 
             if let Some(ref mut player_event_channel) = self.player_event_channel {
                 if let Async::Ready(Some(event)) = player_event_channel.poll().unwrap() {