aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-04-03 10:47:52 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-04-03 10:47:52 +0000
commitdf88846fa78ebe40f935e0486462af0fc0ea81e9 (patch)
tree886a9ea538e51656265e98440b32a1b08d657028
parent2702c8f3dd44e91878013dc2ce552526e90046ba (diff)
downloadenigma2-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.m42
-rw-r--r--lib/base/filepush.cpp21
-rw-r--r--lib/base/filepush.h5
-rw-r--r--lib/base/thread.cpp1
-rw-r--r--lib/base/thread.h1
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);