diff options
author | Frank Schmirler <vdr@schmirler.de> | 2011-03-07 21:37:08 +0100 |
---|---|---|
committer | Frank Schmirler <vdr@schmirler.de> | 2011-03-07 23:04:18 +0100 |
commit | c06970123cd68bd1b2f2695326596430d236f230 (patch) | |
tree | 3f4a4d933a4e095abe5b9d1a68b58a8bf5475a0b /server/server.c | |
parent | ee7929bd39101f877ee731c96c457b5e38565b37 (diff) | |
download | vdr-plugin-streamdev-c06970123cd68bd1b2f2695326596430d236f230.tar.gz vdr-plugin-streamdev-c06970123cd68bd1b2f2695326596430d236f230.tar.bz2 |
Live TV must be switched in VDR main thread (fixes #568).
Diffstat (limited to 'server/server.c')
-rw-r--r-- | server/server.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/server/server.c b/server/server.c index 1bdb20a..c7fa96f 100644 --- a/server/server.c +++ b/server/server.c @@ -121,7 +121,9 @@ void cStreamdevServer::Action(void) cServerConnection *client = c->Accept(); if (!client) continue; + Lock(); m_Clients.Add(client); + Unlock(); if (m_Clients.Count() > StreamdevServerSetup.MaxClients) { esyslog("streamdev: too many clients, rejecting %s:%d", @@ -153,17 +155,21 @@ void cStreamdevServer::Action(void) isyslog("streamdev: closing streamdev connection to %s:%d", s->RemoteIp().c_str(), s->RemotePort()); s->Close(); + Lock(); m_Clients.Del(s); + Unlock(); } s = next; } } + Lock(); while (m_Clients.Count() > 0) { cServerConnection *s = m_Clients.First(); s->Close(); m_Clients.Del(s); } + Unlock(); while (m_Servers.Count() > 0) { cServerComponent *c = m_Servers.First(); @@ -171,3 +177,10 @@ void cStreamdevServer::Action(void) m_Servers.Del(c); } } + +void cStreamdevServer::MainThreadHook(void) +{ + cThreadLock lock(m_Instance); + for (cServerConnection *s = m_Clients.First(); s; s = m_Clients.Next(s)) + s->MainThreadHook(); +} |