diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-04-03 10:47:52 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-04-03 10:47:52 +0000 |
| commit | df88846fa78ebe40f935e0486462af0fc0ea81e9 (patch) | |
| tree | 886a9ea538e51656265e98440b32a1b08d657028 | |
| parent | 2702c8f3dd44e91878013dc2ce552526e90046ba (diff) | |
| download | enigma2-df88846fa78ebe40f935e0486462af0fc0ea81e9.tar.gz enigma2-df88846fa78ebe40f935e0486462af0fc0ea81e9.zip | |
add possibility to do things after thread start.. but before setting the thread to alive
| -rw-r--r-- | acinclude.m4 | 2 | ||||
| -rw-r--r-- | lib/base/filepush.cpp | 21 | ||||
| -rw-r--r-- | lib/base/filepush.h | 5 | ||||
| -rw-r--r-- | lib/base/thread.cpp | 1 | ||||
| -rw-r--r-- | lib/base/thread.h | 1 |
5 files changed, 22 insertions, 8 deletions
diff --git a/acinclude.m4 b/acinclude.m4 index d1a5a04d..8999c441 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -247,7 +247,7 @@ AC_SUBST($1_LIBS) ]) AC_DEFUN(_TUXBOX_APPS_LIB_PKGCONFIG_OPTIONAL,[ -PKG_CHECK_MODULES($1,$2,$3="yes",$3="no") +PKG_CHECK_MODULES($1,$2,$3="no",$3="yes") if test "$$3" = "yes"; then AC_DEFINE($3, 1, [$2 available]) else diff --git a/lib/base/filepush.cpp b/lib/base/filepush.cpp index 8aed99fa..bbce531d 100644 --- a/lib/base/filepush.cpp +++ b/lib/base/filepush.cpp @@ -33,12 +33,6 @@ void eFilePushThread::thread() 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); - dest_pos = lseek(m_fd_dest, 0, SEEK_CUR); source_pos = m_raw_source.lseek(0, SEEK_CUR); @@ -164,6 +158,21 @@ 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 */ diff --git a/lib/base/filepush.h b/lib/base/filepush.h index 25257880..35671cd6 100644 --- a/lib/base/filepush.h +++ b/lib/base/filepush.h @@ -35,7 +35,10 @@ public: enum { evtEOF, evtReadError, evtWriteError, evtUser }; Signal1<void,int> m_event; - + + void installSigUSR1Handler(); + void before_set_thread_alive(); + /* you can send private events if you want */ void sendEvent(int evt); protected: diff --git a/lib/base/thread.cpp b/lib/base/thread.cpp index 7a43a7bb..b64ba136 100644 --- a/lib/base/thread.cpp +++ b/lib/base/thread.cpp @@ -15,6 +15,7 @@ void eThread::thread_completed(void *ptr) void *eThread::wrapper(void *ptr) { eThread *p = (eThread*)ptr; + p->before_set_thread_alive(); p->alive=1; pthread_cleanup_push( thread_completed, (void*)p ); p->thread(); diff --git a/lib/base/thread.h b/lib/base/thread.h index f6c750af..94cdd47e 100644 --- a/lib/base/thread.h +++ b/lib/base/thread.h @@ -18,6 +18,7 @@ public: void run(int prio=0, int policy=0); virtual void thread()=0; + virtual void before_set_thread_alive() { } virtual void thread_finished() { } void sendSignal(int sig); |
