From afcddbfca607b9d3db896364348a571f18887031 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Sat, 15 Mar 2014 14:05:03 +0100 Subject: [PATCH] Temporary fix for live buffers - will be superseded by upcoming architecture changes. --- src/buffer/buffer.cpp | 2 +- src/buffer/buffer_stream.cpp | 11 +++++++++++ src/buffer/buffer_stream.h | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/buffer/buffer.cpp b/src/buffer/buffer.cpp index 93a28376..413f6fdc 100644 --- a/src/buffer/buffer.cpp +++ b/src/buffer/buffer.cpp @@ -152,7 +152,7 @@ namespace Buffer { } }else{ //complete a send - Stream::get()->getPacket(usr->myRing->b).sendTo(usr->S); + Stream::get()->sendPacket(usr->myRing->b, usr->S); if ( !usr->S.connected()){break;} //switch to next buffer if (Stream::get()->isNewest(usr->myRing->b, allowedTracks)){ diff --git a/src/buffer/buffer_stream.cpp b/src/buffer/buffer_stream.cpp index 7f9f0ac2..0336ea0d 100644 --- a/src/buffer/buffer_stream.cpp +++ b/src/buffer/buffer_stream.cpp @@ -3,6 +3,7 @@ #include "buffer_stream.h" #include +#include #include namespace Buffer { @@ -172,6 +173,16 @@ namespace Buffer { name = n; } + void Stream::sendPacket(DTSC::livePos & num, Socket::Connection & S){ + rw_mutex.lock(); + if (!getPacket(num) && buffers.size()){ + DEBUG_MSG(DLVL_DEVEL, "Oh noes, ran out of packets! Resetting to beginning..."); + num = buffers.rbegin()->first; + } + getPacket(num).sendTo(S); + rw_mutex.unlock(); + } + /// parsePacket override that will lock the rw_mutex during parsing. bool Stream::parsePacket(std::string & buffer){ rw_mutex.lock(); diff --git a/src/buffer/buffer_stream.h b/src/buffer/buffer_stream.h index cdc6ac6a..441ab3f1 100644 --- a/src/buffer/buffer_stream.h +++ b/src/buffer/buffer_stream.h @@ -57,6 +57,8 @@ namespace Buffer { bool setInput(Socket::Connection S); /// Gets the current socket for push data. Socket::Connection & getIPInput(); + /// Send a packet while locking the mutex. + void sendPacket(DTSC::livePos & num, Socket::Connection & S); /// Stores intermediate statistics. void saveStats(std::string username, Stats & stats); /// Stores final statistics.