diff --git a/sabnzbd/downloader.py b/sabnzbd/downloader.py index 3dc2124..c7f5176 100644 --- a/sabnzbd/downloader.py +++ b/sabnzbd/downloader.py @@ -251,7 +251,6 @@ class Downloader(Thread): "force_disconnect", "read_fds", "servers", - "server_nr", "timers", ) @@ -289,7 +288,6 @@ class Downloader(Thread): self.read_fds: Dict[int, NewsWrapper] = {} self.servers: List[Server] = [] - self.server_nr: int = 0 self.timers: Dict[str, List[float]] = {} for server in config.get_servers(): @@ -355,9 +353,8 @@ class Downloader(Thread): ) ) - # Update server-count and sort the servers - self.server_nr = len(self.servers) - self.servers.sort(key=lambda svr: "%02d%s" % (svr.priority, svr.displayname.lower())) + # Sort the servers for performance + self.servers.sort(key=lambda svr: "%02d%s" % (svr.priority, svr.displayname.lower())) def add_socket(self, fileno: int, nw: NewsWrapper): """Add a socket ready to be used to the list to be watched""" diff --git a/sabnzbd/nzbqueue.py b/sabnzbd/nzbqueue.py index f697a8f..6719786 100644 --- a/sabnzbd/nzbqueue.py +++ b/sabnzbd/nzbqueue.py @@ -860,7 +860,10 @@ class NzbQueue: def stop_idle_jobs(self): """Detect jobs that have zero files left and send them to post processing""" + # Only check servers that are active + nr_servers = len([server for server in sabnzbd.Downloader.servers[:] if server.active]) empty = [] + for nzo in self.__nzo_list: if not nzo.futuretype and not nzo.files and nzo.status not in (Status.PAUSED, Status.GRABBING): logging.info("Found idle job %s", nzo.final_name) @@ -868,10 +871,10 @@ class NzbQueue: # Stall prevention by checking if all servers are in the trylist # This is a CPU-cheaper alternative to prevent stalling - if len(nzo.try_list) == sabnzbd.Downloader.server_nr: + if len(nzo.try_list) >= nr_servers: # Maybe the NZF's need a reset too? for nzf in nzo.files: - if len(nzf.try_list) == sabnzbd.Downloader.server_nr: + if len(nzf.try_list) >= nr_servers: # We do not want to reset all article trylists, they are good logging.info("Resetting bad trylist for file %s in job %s", nzf.filename, nzo.final_name) nzf.reset_try_list()