aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/base/filepush.cpp28
-rw-r--r--lib/components/file_eraser.cpp6
-rw-r--r--lib/dvb/epgcache.cpp6
3 files changed, 16 insertions, 24 deletions
diff --git a/lib/base/filepush.cpp b/lib/base/filepush.cpp
index bbce531d..d12b8efa 100644
--- a/lib/base/filepush.cpp
+++ b/lib/base/filepush.cpp
@@ -31,7 +31,14 @@ void eFilePushThread::thread()
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);
@@ -158,25 +165,12 @@ int eFilePushThread::start(const char *filename, int fd_dest)
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()
{
- if (!thread_running()) /* FIXME: races */
+ /* if we aren't running, don't bother stopping. */
+ if (!sync())
return;
+
m_stop = 1;
sendSignal(SIGUSR1);
kill();
diff --git a/lib/components/file_eraser.cpp b/lib/components/file_eraser.cpp
index bc26bf7c..6cacf045 100644
--- a/lib/components/file_eraser.cpp
+++ b/lib/components/file_eraser.cpp
@@ -26,14 +26,13 @@ void eBackgroundFileEraser::idle()
eBackgroundFileEraser::~eBackgroundFileEraser()
{
messages.send(Message::quit);
- if ( thread_running() )
- kill();
if (instance==this)
instance=0;
}
void eBackgroundFileEraser::thread()
{
+ hasStarted();
nice(5);
reset();
runLoop();
@@ -51,8 +50,7 @@ void eBackgroundFileEraser::erase(const char *filename)
else
{
messages.send(Message(Message::erase, strdup(buf)));
- if (!thread_running())
- run();
+ run();
}
}
}
diff --git a/lib/dvb/epgcache.cpp b/lib/dvb/epgcache.cpp
index 7c7dd6b2..79012d38 100644
--- a/lib/dvb/epgcache.cpp
+++ b/lib/dvb/epgcache.cpp
@@ -177,12 +177,11 @@ eEPGCache::eEPGCache()
void eEPGCache::timeUpdated()
{
- if ( !thread_running() )
+ if (!sync())
{
eDebug("[EPGC] time updated.. start EPG Mainloop");
run();
- }
- else
+ } else
messages.send(Message(Message::timeChanged));
}
@@ -692,6 +691,7 @@ void eEPGCache::gotMessage( const Message &msg )
void eEPGCache::thread()
{
+ hasStarted();
nice(4);
load();
cleanLoop();