diff options
author | lordjaxom <lordjaxom> | 2005-03-24 21:31:38 +0000 |
---|---|---|
committer | lordjaxom <lordjaxom> | 2005-03-24 21:31:38 +0000 |
commit | 183de0e401637f73a4f8afd10e38cb3f17a6a0f3 (patch) | |
tree | f9aac20a4c08afe30985edb68ca9ac5b7e6e889d /server | |
parent | 3aa01282662a5907cc283a151bba8a939672a065 (diff) | |
download | vdr-plugin-streamdev-183de0e401637f73a4f8afd10e38cb3f17a6a0f3.tar.gz vdr-plugin-streamdev-183de0e401637f73a4f8afd10e38cb3f17a6a0f3.tar.bz2 |
- streamer now gets stopped when connection terminates unexpectedly
- fixed recursive delete in streamer
Diffstat (limited to 'server')
-rw-r--r-- | server/connection.c | 8 | ||||
-rw-r--r-- | server/streamer.c | 34 |
2 files changed, 28 insertions, 14 deletions
diff --git a/server/connection.c b/server/connection.c index 1011aa9..762d184 100644 --- a/server/connection.c +++ b/server/connection.c @@ -1,5 +1,5 @@ /* - * $Id: connection.c,v 1.2 2005/02/08 17:22:35 lordjaxom Exp $ + * $Id: connection.c,v 1.3 2005/03/24 21:31:38 lordjaxom Exp $ */ #include "server/connection.h" @@ -130,10 +130,10 @@ cDevice *cServerConnection::GetDevice(const cChannel *Channel, int Priority) { // maybe a device would be free if THIS connection did turn off its streams? Dprintf(" * trying again...\n"); const cChannel *current = Channels.GetByNumber(cDevice::CurrentChannel()); - isyslog("streamdev-server: Detaching current receiver"); - Detach(); + //isyslog("streamdev-server: Detaching current receiver"); + //Detach(); XXX+ device = cDevice::GetDevice(Channel, Priority); - Attach(); + //Attach(); XXX+ Dprintf(" * Found following device: %p (%d)\n", device, device ? device->CardIndex() + 1 : 0); if (device == cDevice::ActualDevice()) diff --git a/server/streamer.c b/server/streamer.c index a6afea8..bfc0203 100644 --- a/server/streamer.c +++ b/server/streamer.c @@ -1,5 +1,5 @@ /* - * $Id: streamer.c,v 1.8 2005/02/11 17:02:22 lordjaxom Exp $ + * $Id: streamer.c,v 1.9 2005/03/24 21:31:38 lordjaxom Exp $ */ #include <vdr/ringbuffer.h> @@ -11,6 +11,7 @@ #include "server/suspend.h" #include "server/setup.h" #include "tools/socket.h" +#include "tools/select.h" #include "common.h" // --- cStreamdevWriter ------------------------------------------------------- @@ -25,12 +26,14 @@ cStreamdevWriter::cStreamdevWriter(cTBSocket *Socket, cStreamdevStreamer *Stream cStreamdevWriter::~cStreamdevWriter() { + Dprintf("destructing writer\n"); m_Active = false; Cancel(3); } void cStreamdevWriter::Action(void) { + cTBSelect sel; Dprintf("Writer start\n"); int max = 0; m_Active = true; @@ -39,17 +42,28 @@ void cStreamdevWriter::Action(void) uchar *block = m_Streamer->Get(count); if (block) { - if (!m_Socket->TimedWrite(block, count, 2000)) { + sel.Clear(); + sel.Add(*m_Socket, true); + if (sel.Select(500) == -1) { esyslog("ERROR: streamdev-server: couldn't send data: %m"); break; } - if (count > max) - max = count; - m_Streamer->Del(count); + + if (sel.CanWrite(*m_Socket)) { + int written; + if ((written = m_Socket->Write(block, count)) == -1) { + esyslog("ERROR: streamdev-server: couldn't send data: %m"); + break; + } + if (count > max) + max = count; + m_Streamer->Del(written); + } } } m_Active = false; Dprintf("Max. Transmit Blocksize was: %d\n", max); + m_Streamer->Stop(); } // --- cStreamdevStreamer ----------------------------------------------------- @@ -70,9 +84,7 @@ cStreamdevStreamer::cStreamdevStreamer(const char *Name): cStreamdevStreamer::~cStreamdevStreamer() { Dprintf("Desctructing streamer\n"); - Stop(); delete m_RingBuffer; - delete m_Writer; delete m_SendBuffer; } @@ -100,9 +112,11 @@ void cStreamdevStreamer::Stop(void) m_Active = false; Cancel(3); } - Detach(); - DELETENULL(m_Writer); - m_Running = false; + if (m_Running) { + Detach(); + m_Running = false; + DELETENULL(m_Writer); + } } void cStreamdevStreamer::Action(void) |