summaryrefslogtreecommitdiff
path: root/src/MusicPipe.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/MusicPipe.cxx')
-rw-r--r--src/MusicPipe.cxx18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/MusicPipe.cxx b/src/MusicPipe.cxx
index 35a79edc5..7a78855b2 100644
--- a/src/MusicPipe.cxx
+++ b/src/MusicPipe.cxx
@@ -38,7 +38,7 @@ MusicPipe::Contains(const MusicChunk *chunk) const noexcept
#endif
-MusicChunk *
+MusicChunkPtr
MusicPipe::Shift() noexcept
{
const std::lock_guard<Mutex> protect(mutex);
@@ -69,20 +69,17 @@ MusicPipe::Shift() noexcept
#endif
}
- return chunk;
+ return MusicChunkPtr(chunk, MusicChunkDeleter(buffer));
}
void
MusicPipe::Clear() noexcept
{
- MusicChunk *chunk;
-
- while ((chunk = Shift()) != nullptr)
- buffer.Return(chunk);
+ while (Shift()) {}
}
void
-MusicPipe::Push(MusicChunk *chunk) noexcept
+MusicPipe::Push(MusicChunkPtr chunk) noexcept
{
assert(!chunk->IsEmpty());
assert(chunk->length == 0 || chunk->audio_format.IsValid());
@@ -98,9 +95,10 @@ MusicPipe::Push(MusicChunk *chunk) noexcept
audio_format = chunk->audio_format;
#endif
- chunk->next = nullptr;
- *tail_r = chunk;
- tail_r = &chunk->next;
+ auto *c = chunk.release();
+ c->next = nullptr;
+ *tail_r = c;
+ tail_r = &c->next;
++size;
}