writer must not spend too much time waiting in select() without checking

if the thread has been cancelled.

Delayed the streamdev main thread for up to 3 seconds. As the command timeou
of VTP connections is 1.5 seconds, one hanging connection could have caused
VTP connections to die.
This commit is contained in:
Frank Schmirler 2011-04-11 13:56:49 +02:00
parent 17bb6390f9
commit 19e8cf2a28
2 changed files with 7 additions and 1 deletions

View File

@ -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

View File

@ -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;