From d79587c2a98eb43ddae20462a56f37d2af2298ba Mon Sep 17 00:00:00 2001 From: hschang Date: Tue, 5 Nov 2013 21:50:11 +0900 Subject: [PATCH] ServiceScan : modify to prevent error --- lib/components/scan.cpp | 11 +++++++++++ lib/components/scan.h | 1 + lib/python/Components/ServiceScan.py | 16 +++++++++++----- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/components/scan.cpp b/lib/components/scan.cpp index c027fe6..0aaf113 100644 --- a/lib/components/scan.cpp +++ b/lib/components/scan.cpp @@ -62,6 +62,17 @@ void eComponentScan::clear() m_initial.clear(); } +void eComponentScan::clearAll() +{ + m_scan_event_connection = 0; + m_scan = 0; + + m_initial.clear(); + m_done = -1; + m_failed = 0; +} + + void eComponentScan::addInitial(const eDVBFrontendParametersSatellite &p) { ePtr parm = new eDVBFrontendParameters(); diff --git a/lib/components/scan.h b/lib/components/scan.h index 222158b..e3bbfc3 100644 --- a/lib/components/scan.h +++ b/lib/components/scan.h @@ -39,6 +39,7 @@ public: int getError(); void clear(); + void clearAll(); void addInitial(const eDVBFrontendParametersSatellite &p); void addInitial(const eDVBFrontendParametersCable &p); void addInitial(const eDVBFrontendParametersTerrestrial &p); diff --git a/lib/python/Components/ServiceScan.py b/lib/python/Components/ServiceScan.py index 0ca69cf..6a82ade 100644 --- a/lib/python/Components/ServiceScan.py +++ b/lib/python/Components/ServiceScan.py @@ -119,7 +119,7 @@ class ServiceScan: if self.state == self.Done or self.state == self.Error: if self.run != len(self.scanList) - 1: self.foundServices += self.scan.getNumServices() - self.execEnd() + self.execEnd(False) # reset eComponentScan self.run += 1 self.execBegin() @@ -135,9 +135,11 @@ class ServiceScan: self.network = network self.run = 0 self.lcd_summary = lcd_summary + self.scan = None def doRun(self): - self.scan = eComponentScan() + if self.scan is None: + self.scan = eComponentScan() self.frontendInfo.frontend_source = lambda : self.scan.getFrontend() self.feid = self.scanList[self.run]["feid"] self.flags = self.scanList[self.run]["flags"] @@ -166,13 +168,17 @@ class ServiceScan: self.errorcode = 0 self.scanStatusChanged() - def execEnd(self): + def execEnd(self, onClose = True): + # when closing screen, destroy eComponentScan. otherwise reset. self.scan.statusChanged.get().remove(self.scanStatusChanged) self.scan.newService.get().remove(self.newService) if not self.isDone(): print "*** warning *** scan was not finished!" - - del self.scan + + if onClose: + self.scan = None + else: + self.scan.clearAll() def isDone(self): return self.state == self.Done or self.state == self.Error -- 2.7.4