From 2c76959422e7f57e43a359ff1d5ceb74dc4232d5 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 3 Apr 2006 21:03:16 +0000 Subject: [PATCH] follow eThread changes: mainly thread_running -> sync, hasStarted() --- lib/base/filepush.cpp | 28 +++++++++++----------------- lib/components/file_eraser.cpp | 6 ++---- lib/dvb/epgcache.cpp | 6 +++--- 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(); -- 2.30.2