summaryrefslogtreecommitdiff
path: root/receiver
diff options
context:
space:
mode:
Diffstat (limited to 'receiver')
-rw-r--r--receiver/livereceiver.cpp10
-rw-r--r--receiver/livereceiver.h3
2 files changed, 12 insertions, 1 deletions
diff --git a/receiver/livereceiver.cpp b/receiver/livereceiver.cpp
index 593853f..9ba69eb 100644
--- a/receiver/livereceiver.cpp
+++ b/receiver/livereceiver.cpp
@@ -129,13 +129,21 @@ int cLiveReceiver::read(char* buf, size_t buflen){
if(!this->IsAttached())
bytesRead = -1;
else {
+ int WaitTimeout = RECEIVER_WAIT_ON_NODATA_TIMEOUT; // 10 Seconds timeout with no data
while(!this->mOutputBuffer->Available()){
WARNING("No data, waiting...");
- cCondWait::SleepMs(50);
+ cCondWait::SleepMs(RECEIVER_WAIT_ON_NODATA);
if(!this->IsAttached()){
MESSAGE("Lost device...");
return 0;
}
+ WaitTimeout-=RECEIVER_WAIT_ON_NODATA;
+ if(WaitTimeout<=0){
+ double seconds = (RECEIVER_WAIT_ON_NODATA_TIMEOUT/1000);
+ ERROR("No data received for %4.2f seconds, aborting.", seconds);
+ this->Activate(false);
+ return 0;
+ }
}
uchar* buffer = this->mOutputBuffer->Get(bytesRead);
diff --git a/receiver/livereceiver.h b/receiver/livereceiver.h
index 4632733..9da8923 100644
--- a/receiver/livereceiver.h
+++ b/receiver/livereceiver.h
@@ -13,6 +13,9 @@
#include <vdr/thread.h>
#include <vdr/receiver.h>
+#define RECEIVER_WAIT_ON_NODATA 50 // 50 ms
+#define RECEIVER_WAIT_ON_NODATA_TIMEOUT 1000 * 10 // 10s
+
class cLiveReceiver : public cReceiver, public cThread, public cFileHandle {
public:
static cLiveReceiver* newInstance(cChannel *Channel, int Priority);