decoder/Control: wrap DetachedSong* in std::unique_ptr

This commit is contained in:
Max Kellermann 2017-11-26 12:11:07 +01:00
parent 9a8a3beae4
commit 28fdf1e9ed
3 changed files with 7 additions and 12 deletions

View File

@ -38,8 +38,6 @@ DecoderControl::DecoderControl(Mutex &_mutex, Cond &_client_cond,
DecoderControl::~DecoderControl() noexcept DecoderControl::~DecoderControl() noexcept
{ {
ClearError(); ClearError();
delete song;
} }
void void
@ -92,7 +90,7 @@ DecoderControl::IsCurrentSong(const DetachedSong &_song) const noexcept
} }
void void
DecoderControl::Start(DetachedSong *_song, DecoderControl::Start(std::unique_ptr<DetachedSong> _song,
SongTime _start_time, SongTime _end_time, SongTime _start_time, SongTime _end_time,
MusicBuffer &_buffer, MusicPipe &_pipe) noexcept MusicBuffer &_buffer, MusicPipe &_pipe) noexcept
{ {
@ -101,8 +99,7 @@ DecoderControl::Start(DetachedSong *_song,
assert(_song != nullptr); assert(_song != nullptr);
assert(_pipe.IsEmpty()); assert(_pipe.IsEmpty());
delete song; song = std::move(_song);
song = _song;
start_time = _start_time; start_time = _start_time;
end_time = _end_time; end_time = _end_time;
buffer = &_buffer; buffer = &_buffer;

View File

@ -31,8 +31,8 @@
#include "ReplayGainMode.hxx" #include "ReplayGainMode.hxx"
#include <exception> #include <exception>
#include <utility> #include <utility>
#include <memory>
#include <assert.h> #include <assert.h>
#include <stdint.h> #include <stdint.h>
@ -130,11 +130,8 @@ struct DecoderControl {
* The song currently being decoded. This attribute is set by * The song currently being decoded. This attribute is set by
* the player thread, when it sends the #DecoderCommand::START * the player thread, when it sends the #DecoderCommand::START
* command. * command.
*
* This is a duplicate, and must be freed when this attribute
* is cleared.
*/ */
DetachedSong *song = nullptr; std::unique_ptr<DetachedSong> song;
/** /**
* The initial seek position, e.g. to the start of a sub-track * The initial seek position, e.g. to the start of a sub-track
@ -382,7 +379,8 @@ public:
* @param pipe the pipe which receives the decoded chunks (owned by * @param pipe the pipe which receives the decoded chunks (owned by
* the caller) * the caller)
*/ */
void Start(DetachedSong *song, SongTime start_time, SongTime end_time, void Start(std::unique_ptr<DetachedSong> song,
SongTime start_time, SongTime end_time,
MusicBuffer &buffer, MusicPipe &pipe) noexcept; MusicBuffer &buffer, MusicPipe &pipe) noexcept;
void Stop() noexcept; void Stop() noexcept;

View File

@ -360,7 +360,7 @@ Player::StartDecoder(MusicPipe &_pipe)
SongTime start_time = pc.next_song->GetStartTime() + pc.seek_time; SongTime start_time = pc.next_song->GetStartTime() + pc.seek_time;
dc.Start(new DetachedSong(*pc.next_song), dc.Start(std::make_unique<DetachedSong>(*pc.next_song),
start_time, pc.next_song->GetEndTime(), start_time, pc.next_song->GetEndTime(),
buffer, _pipe); buffer, _pipe);
} }