From b416a715ba06d1a855d40f15d55269a55dab9138 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Wed, 29 Jan 2014 16:44:18 +0100 Subject: [PATCH] Fixed several MistBuffer memory management issues. --- src/buffer/buffer.cpp | 3 +++ src/buffer/buffer_stream.cpp | 6 ++++++ src/buffer/buffer_stream.h | 1 + 3 files changed, 10 insertions(+) diff --git a/src/buffer/buffer.cpp b/src/buffer/buffer.cpp index bf90d11e..93a28376 100644 --- a/src/buffer/buffer.cpp +++ b/src/buffer/buffer.cpp @@ -190,6 +190,7 @@ namespace Buffer { Socket::Connection tmp = usr->S; usr->S = Socket::Connection( -1); thisStream->removeUser(usr); + thisStream->dropRing(usr->myRing); delete usr; return handlePushIn(tmp); }else{ @@ -264,7 +265,9 @@ namespace Buffer { } } usr->Disconnect("Socket closed."); + thisStream->dropRing(usr->myRing); thisStream->removeUser(usr); + delete usr; } ///\brief Starts a loop, waiting for connections to send data to. diff --git a/src/buffer/buffer_stream.cpp b/src/buffer/buffer_stream.cpp index e297d926..7f9f0ac2 100644 --- a/src/buffer/buffer_stream.cpp +++ b/src/buffer/buffer_stream.cpp @@ -189,6 +189,12 @@ namespace Buffer { tthread::lock_guard guard(rw_mutex); return DTSC::Stream::getNext(pos, allowedTracks); } + + /// endStream override that will lock the rw_mutex + void Stream::endStream(){ + tthread::lock_guard guard(rw_mutex); + return DTSC::Stream::endStream(); + } /// Removes a track and all related buffers from the stream. void Stream::removeTrack(int trackId){ diff --git a/src/buffer/buffer_stream.h b/src/buffer/buffer_stream.h index 8995b4e6..cdc6ac6a 100644 --- a/src/buffer/buffer_stream.h +++ b/src/buffer/buffer_stream.h @@ -84,6 +84,7 @@ namespace Buffer { /// Logs a message to the controller. void Log(std::string type, std::string message); DTSC::livePos getNext(DTSC::livePos & pos, std::set & allowedTracks); + void endStream(); private: void deletionCallback(DTSC::livePos deleting); tthread::mutex rw_mutex; ///< Mutex for read/write locking.