follow eThread changes: mainly thread_running -> sync, hasStarted()
authorFelix Domke <tmbinc@elitedvb.net>
Mon, 3 Apr 2006 21:03:16 +0000 (21:03 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Mon, 3 Apr 2006 21:03:16 +0000 (21:03 +0000)
lib/base/filepush.cpp
lib/components/file_eraser.cpp
lib/dvb/epgcache.cpp

index bbce531..d12b8ef 100644 (file)
@@ -31,7 +31,14 @@ void eFilePushThread::thread()
        
        int already_empty = 0;
        eDebug("FILEPUSH THREAD START");
        
        int already_empty = 0;
        eDebug("FILEPUSH THREAD START");
-               // this is a race. FIXME.
+       
+               /* we set the signal to not restart syscalls, so we can detect our signal. */
+       struct sigaction act;
+       act.sa_handler = signal_handler; // no, SIG_IGN doesn't do it. we want to receive the -EINTR
+       act.sa_flags = 0;
+       sigaction(SIGUSR1, &act, 0);
+       
+       hasStarted();
        
        dest_pos = lseek(m_fd_dest, 0, SEEK_CUR);
        source_pos = m_raw_source.lseek(0, SEEK_CUR);
        
        dest_pos = lseek(m_fd_dest, 0, SEEK_CUR);
        source_pos = m_raw_source.lseek(0, SEEK_CUR);
@@ -158,25 +165,12 @@ int eFilePushThread::start(const char *filename, int fd_dest)
        return 0;
 }
 
        return 0;
 }
 
-void eFilePushThread::installSigUSR1Handler()
-{
-               /* we set the signal to not restart syscalls, so we can detect our signal. */
-       struct sigaction act;
-       act.sa_handler = signal_handler; // no, SIG_IGN doesn't do it. we want to receive the -EINTR
-       act.sa_flags = 0;
-       sigaction(SIGUSR1, &act, 0);
-}
-
-// called from thread before alive is set to 1
-void eFilePushThread::before_set_thread_alive()
-{
-       installSigUSR1Handler();
-}
-
 void eFilePushThread::stop()
 {
 void eFilePushThread::stop()
 {
-       if (!thread_running()) /* FIXME: races */
+               /* if we aren't running, don't bother stopping. */
+       if (!sync())
                return;
                return;
+
        m_stop = 1;
        sendSignal(SIGUSR1);
        kill();
        m_stop = 1;
        sendSignal(SIGUSR1);
        kill();
index bc26bf7..6cacf04 100644 (file)
@@ -26,14 +26,13 @@ void eBackgroundFileEraser::idle()
 eBackgroundFileEraser::~eBackgroundFileEraser()
 {
        messages.send(Message::quit);
 eBackgroundFileEraser::~eBackgroundFileEraser()
 {
        messages.send(Message::quit);
-       if ( thread_running() )
-               kill();
        if (instance==this)
                instance=0;
 }
 
 void eBackgroundFileEraser::thread()
 {
        if (instance==this)
                instance=0;
 }
 
 void eBackgroundFileEraser::thread()
 {
+       hasStarted();
        nice(5);
        reset();
        runLoop();
        nice(5);
        reset();
        runLoop();
@@ -51,8 +50,7 @@ void eBackgroundFileEraser::erase(const char *filename)
                else
                {
                        messages.send(Message(Message::erase, strdup(buf)));
                else
                {
                        messages.send(Message(Message::erase, strdup(buf)));
-                       if (!thread_running())
-                               run();
+                       run();
                }
        }
 }
                }
        }
 }
index 7c7dd6b..79012d3 100644 (file)
@@ -177,12 +177,11 @@ eEPGCache::eEPGCache()
 
 void eEPGCache::timeUpdated()
 {
 
 void eEPGCache::timeUpdated()
 {
-       if ( !thread_running() )
+       if (!sync())
        {
                eDebug("[EPGC] time updated.. start EPG Mainloop");
                run();
        {
                eDebug("[EPGC] time updated.. start EPG Mainloop");
                run();
-       }
-       else
+       } else
                messages.send(Message(Message::timeChanged));
 }
 
                messages.send(Message(Message::timeChanged));
 }
 
@@ -692,6 +691,7 @@ void eEPGCache::gotMessage( const Message &msg )
 
 void eEPGCache::thread()
 {
 
 void eEPGCache::thread()
 {
+       hasStarted();
        nice(4);
        load();
        cleanLoop();
        nice(4);
        load();
        cleanLoop();