fix
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Sun, 7 May 2006 12:51:36 +0000 (12:51 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Sun, 7 May 2006 12:51:36 +0000 (12:51 +0000)
lib/base/ebase.cpp
lib/dvb/frontend.cpp

index f990f6b89aa35af987b0a97d478704dfbafd742d..5dd8e0ae811b984da6909b53a88f68a6b9dbe746 100644 (file)
@@ -185,7 +185,7 @@ int eMainloop::processOneEvent(unsigned int user_timeout, PyObject **res, PyObje
        }
                
                // build the poll aray
        }
                
                // build the poll aray
-       pollfd* pfd = new pollfd[fdcount];  // make new pollfd array
+       pollfd pfd[fdcount];  // make new pollfd array
                
        for (int i=0; i < nativecount; i++, fd_merged_it++)
        {
                
        for (int i=0; i < nativecount; i++, fd_merged_it++)
        {
@@ -271,7 +271,6 @@ int eMainloop::processOneEvent(unsigned int user_timeout, PyObject **res, PyObje
                        ret = -1; /* don't assume the timeout has passed when we got a signal */
                }
        }
                        ret = -1; /* don't assume the timeout has passed when we got a signal */
                }
        }
-       delete [] pfd;
        
                /* when we not processed anything, check timers. */
        if (!m_timer_list.empty())
        
                /* when we not processed anything, check timers. */
        if (!m_timer_list.empty())
index 9ff1b27519ab01b92131e2f0715b56983be9e12f..063cbe078b9d110ed202d74d6a20a6b899f5cf5c 100644 (file)
@@ -305,7 +305,7 @@ RESULT eDVBFrontendParameters::getHash(unsigned long &hash) const
 DEFINE_REF(eDVBFrontend);
 
 eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok)
 DEFINE_REF(eDVBFrontend);
 
 eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok)
-       :m_type(-1), m_fe(fe), m_fd(-1), m_timeout(0), m_tuneTimer(0)
+       :m_type(-1), m_fe(fe), m_fd(-1), m_sn(0), m_timeout(0), m_tuneTimer(0)
 #if HAVE_DVB_API_VERSION < 3
        ,m_secfd(-1)
 #endif
 #if HAVE_DVB_API_VERSION < 3
        ,m_secfd(-1)
 #endif
@@ -334,35 +334,44 @@ eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok)
 
 int eDVBFrontend::openFrontend()
 {
 
 int eDVBFrontend::openFrontend()
 {
-       if (m_fd >= 0)
+       if (m_sn)
                return -1;  // already opened
 
        m_state=0;
        m_tuning=0;
 
 #if HAVE_DVB_API_VERSION < 3
                return -1;  // already opened
 
        m_state=0;
        m_tuning=0;
 
 #if HAVE_DVB_API_VERSION < 3
-       m_secfd = ::open(m_sec_filename, O_RDWR);
        if (m_secfd < 0)
        {
        if (m_secfd < 0)
        {
-               eWarning("failed! (%s) %m", m_sec_filename);
-               return -1;
+               m_secfd = ::open(m_sec_filename, O_RDWR);
+               if (m_secfd < 0)
+               {
+                       eWarning("failed! (%s) %m", m_sec_filename);
+                       return -1;
+               }
        }
        }
+       else
+               eWarning("sec %d already opened", m_fe);
        FrontendInfo fe_info;
 #else
        dvb_frontend_info fe_info;
 #endif
        eDebug("opening frontend %d", m_fe);
        FrontendInfo fe_info;
 #else
        dvb_frontend_info fe_info;
 #endif
        eDebug("opening frontend %d", m_fe);
-       m_fd = ::open(m_filename, O_RDWR|O_NONBLOCK);
        if (m_fd < 0)
        {
        if (m_fd < 0)
        {
-               eWarning("failed! (%s) %m", m_filename);
+               m_fd = ::open(m_filename, O_RDWR|O_NONBLOCK);
+               if (m_fd < 0)
+               {
+                       eWarning("failed! (%s) %m", m_filename);
 #if HAVE_DVB_API_VERSION < 3
 #if HAVE_DVB_API_VERSION < 3
-               ::close(m_secfd);
-               m_secfd=-1;
+                       ::close(m_secfd);
+                       m_secfd=-1;
 #endif
 #endif
-               return -1;
+                       return -1;
+               }
        }
        }
-
+       else
+               eWarning("frontend %d already opened", m_fe);
        if (m_type == -1)
        {
                if (::ioctl(m_fd, FE_GET_INFO, &fe_info) < 0)
        if (m_type == -1)
        {
                if (::ioctl(m_fd, FE_GET_INFO, &fe_info) < 0)
@@ -431,15 +440,19 @@ int eDVBFrontend::closeFrontend()
                setVoltage(iDVBFrontend::voltageOff);
                if (m_sec)
                        m_sec->setRotorMoving(false);
                setVoltage(iDVBFrontend::voltageOff);
                if (m_sec)
                        m_sec->setRotorMoving(false);
-               ::close(m_fd);
-               m_fd=-1;
+               if (!::close(m_fd))
+                       m_fd=-1;
+               else
+                       eWarning("couldnt close frontend %d", m_fe);
                m_data[0] = m_data[1] = m_data[2] = -1;
        }
 #if HAVE_DVB_API_VERSION < 3
        if (m_secfd >= 0)
        {
                m_data[0] = m_data[1] = m_data[2] = -1;
        }
 #if HAVE_DVB_API_VERSION < 3
        if (m_secfd >= 0)
        {
-               ::close(m_secfd);
-               m_secfd=-1;
+               if (!::close(m_secfd))
+                       m_secfd=-1;
+               else
+                       eWarning("couldnt close sec %d", m_fe);
        }
 #endif
        delete m_sn;
        }
 #endif
        delete m_sn;