ServiceScan : modify to prevent error
authorhschang <chang@dev3>
Tue, 5 Nov 2013 12:50:11 +0000 (21:50 +0900)
committerhschang <chang@dev3>
Wed, 6 Nov 2013 02:26:28 +0000 (11:26 +0900)
lib/components/scan.cpp
lib/components/scan.h
lib/python/Components/ServiceScan.py

index c027fe6..0aaf113 100644 (file)
@@ -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<eDVBFrontendParameters> parm = new eDVBFrontendParameters();
index 222158b..e3bbfc3 100644 (file)
@@ -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);
index 0ca69cf..6a82ade 100644 (file)
@@ -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