aboutsummaryrefslogtreecommitdiff
path: root/lib/base/filepush.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/base/filepush.cpp')
-rw-r--r--lib/base/filepush.cpp21
1 files changed, 15 insertions, 6 deletions
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 */