diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2006-01-17 00:21:01 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2006-01-17 00:21:01 +0000 |
| commit | a2c5f9998376a5877aef36e410921908ab8605ba (patch) | |
| tree | 2a8a68d9d2151850cf33f3269875f5342f7579c6 /lib/base | |
| parent | 03582d8351bdcbbb1482d937e3d03667ff8d63b8 (diff) | |
| download | enigma2-a2c5f9998376a5877aef36e410921908ab8605ba.tar.gz enigma2-a2c5f9998376a5877aef36e410921908ab8605ba.zip | |
filepush: do not loop anymore on eof, but signal an event
Diffstat (limited to 'lib/base')
| -rw-r--r-- | lib/base/filepush.cpp | 17 | ||||
| -rw-r--r-- | lib/base/filepush.h | 12 |
2 files changed, 27 insertions, 2 deletions
diff --git a/lib/base/filepush.cpp b/lib/base/filepush.cpp index cb22ea1b..7ab8c0d3 100644 --- a/lib/base/filepush.cpp +++ b/lib/base/filepush.cpp @@ -4,10 +4,11 @@ #include <errno.h> #include <fcntl.h> -eFilePushThread::eFilePushThread() +eFilePushThread::eFilePushThread(): m_messagepump(eApp, 0) { m_stop = 0; flush(); + CONNECT(m_messagepump.recv_msg, eFilePushThread::recvEvent); } static void signal_handler(int x) @@ -65,12 +66,16 @@ void eFilePushThread::thread() } if (m_buf_end == 0) { + sendEvent(evtEOF); + +#if 0 eDebug("FILEPUSH: end-of-file! (currently unhandled)"); if (!lseek(m_fd_source, 0, SEEK_SET)) { eDebug("(looping)"); continue; } +#endif break; } // printf("FILEPUSH: read %d bytes\n", m_buf_end); @@ -114,3 +119,13 @@ void eFilePushThread::flush() m_buf_start = m_buf_end = 0; } + +void eFilePushThread::sendEvent(int evt) +{ + m_messagepump.send(evt); +} + +void eFilePushThread::recvEvent(const int &evt) +{ + m_event(evt); +} diff --git a/lib/base/filepush.h b/lib/base/filepush.h index a419d719..7eb79974 100644 --- a/lib/base/filepush.h +++ b/lib/base/filepush.h @@ -2,9 +2,11 @@ #define __lib_base_filepush_h #include <lib/base/thread.h> +#include <libsig_comp.h> +#include <lib/base/message.h> #include <sys/types.h> -class eFilePushThread: public eThread +class eFilePushThread: public eThread, public Object { public: eFilePushThread(); @@ -19,11 +21,19 @@ public: /* flushes the internal readbuffer */ void flush(); + enum { evtEOF, evtReadError, evtWriteError }; + Signal1<void,int> m_event; + private: int m_stop; unsigned char m_buffer[65536]; int m_buf_start, m_buf_end; int m_fd_source, m_fd_dest; + + eFixedMessagePump<int> m_messagepump; + + void sendEvent(int evt); + void recvEvent(const int &evt); }; #endif |
