diff --git a/HISTORY b/HISTORY index 35f9f39..917ceda 100644 --- a/HISTORY +++ b/HISTORY @@ -1,6 +1,8 @@ VDR Plugin 'streamdev' Revision History --------------------------------------- +- writer must not spend too much time waiting in select() without checking + if the thread has been cancelled - added Spanish translation (thanks to Javier Bradineras) - live TV must be switched in VDR main thread - dropped compatibility with VDR < 1.5.16 diff --git a/server/streamer.c b/server/streamer.c index ec7d3c3..3ae513d 100644 --- a/server/streamer.c +++ b/server/streamer.c @@ -45,6 +45,7 @@ void cStreamdevWriter::Action(void) int max = 0; uchar *block = NULL; int count, offset = 0; + int timeout = 0; #if APIVERSNUM >= 10705 SetPriority(-3); @@ -58,10 +59,13 @@ void cStreamdevWriter::Action(void) } if (block != NULL) { - if (sel.Select(15000) == -1) { + if (sel.Select(600) == -1) { + if (errno == ETIMEDOUT && timeout++ < 20) + continue; // still Running()? esyslog("ERROR: streamdev-server: couldn't send data: %m"); break; } + timeout = 0; if (sel.CanWrite(*m_Socket)) { int written;