Commit 82337dec authored by Max Kellermann's avatar Max Kellermann

InputStream: add virtual destructor

Replaces the method Close().
parent f1d07002
...@@ -48,8 +48,7 @@ public: ...@@ -48,8 +48,7 @@ public:
is(nullptr) {} is(nullptr) {}
~TagFileScan() { ~TagFileScan() {
if (is != nullptr) delete is;
is->Close();
} }
bool ScanFile(const DecoderPlugin &plugin) { bool ScanFile(const DecoderPlugin &plugin) {
......
...@@ -73,6 +73,6 @@ tag_stream_scan(const char *uri, const tag_handler &handler, void *ctx) ...@@ -73,6 +73,6 @@ tag_stream_scan(const char *uri, const tag_handler &handler, void *ctx)
return false; return false;
bool success = tag_stream_scan(*is, handler, ctx); bool success = tag_stream_scan(*is, handler, ctx);
is->Close(); delete is;
return success; return success;
} }
...@@ -61,7 +61,7 @@ public: ...@@ -61,7 +61,7 @@ public:
} }
~Bzip2ArchiveFile() { ~Bzip2ArchiveFile() {
istream->Close(); delete istream;
} }
void Ref() { void Ref() {
...@@ -102,7 +102,6 @@ struct Bzip2InputStream final : public InputStream { ...@@ -102,7 +102,6 @@ struct Bzip2InputStream final : public InputStream {
~Bzip2InputStream(); ~Bzip2InputStream();
bool Open(Error &error); bool Open(Error &error);
void Close();
}; };
extern const InputPlugin bz2_inputplugin; extern const InputPlugin bz2_inputplugin;
...@@ -132,12 +131,6 @@ Bzip2InputStream::Open(Error &error) ...@@ -132,12 +131,6 @@ Bzip2InputStream::Open(Error &error)
return true; return true;
} }
inline void
Bzip2InputStream::Close()
{
BZ2_bzDecompressEnd(&bzstream);
}
/* archive open && listing routine */ /* archive open && listing routine */
static ArchiveFile * static ArchiveFile *
...@@ -166,6 +159,7 @@ Bzip2InputStream::Bzip2InputStream(Bzip2ArchiveFile &_context, ...@@ -166,6 +159,7 @@ Bzip2InputStream::Bzip2InputStream(Bzip2ArchiveFile &_context,
Bzip2InputStream::~Bzip2InputStream() Bzip2InputStream::~Bzip2InputStream()
{ {
BZ2_bzDecompressEnd(&bzstream);
archive->Unref(); archive->Unref();
} }
...@@ -183,15 +177,6 @@ Bzip2ArchiveFile::OpenStream(const char *path, ...@@ -183,15 +177,6 @@ Bzip2ArchiveFile::OpenStream(const char *path,
return bis; return bis;
} }
static void
bz2_is_close(InputStream *is)
{
Bzip2InputStream *bis = (Bzip2InputStream *)is;
bis->Close();
delete bis;
}
static bool static bool
bz2_fillbuffer(Bzip2InputStream *bis, Error &error) bz2_fillbuffer(Bzip2InputStream *bis, Error &error)
{ {
...@@ -273,7 +258,6 @@ const InputPlugin bz2_inputplugin = { ...@@ -273,7 +258,6 @@ const InputPlugin bz2_inputplugin = {
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
bz2_is_close,
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
......
...@@ -181,14 +181,6 @@ Iso9660ArchiveFile::OpenStream(const char *pathname, ...@@ -181,14 +181,6 @@ Iso9660ArchiveFile::OpenStream(const char *pathname,
statbuf); statbuf);
} }
static void
iso9660_input_close(InputStream *is)
{
Iso9660InputStream *iis = (Iso9660InputStream *)is;
delete iis;
}
inline size_t inline size_t
Iso9660InputStream::Read(void *ptr, size_t read_size, Error &error) Iso9660InputStream::Read(void *ptr, size_t read_size, Error &error)
{ {
...@@ -250,7 +242,6 @@ const InputPlugin iso9660_input_plugin = { ...@@ -250,7 +242,6 @@ const InputPlugin iso9660_input_plugin = {
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
iso9660_input_close,
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
......
...@@ -142,14 +142,6 @@ ZzipArchiveFile::OpenStream(const char *pathname, ...@@ -142,14 +142,6 @@ ZzipArchiveFile::OpenStream(const char *pathname,
_file); _file);
} }
static void
zzip_input_close(InputStream *is)
{
ZzipInputStream *zis = (ZzipInputStream *)is;
delete zis;
}
static size_t static size_t
zzip_input_read(InputStream *is, void *ptr, size_t size, zzip_input_read(InputStream *is, void *ptr, size_t size,
Error &error) Error &error)
...@@ -202,7 +194,6 @@ const InputPlugin zzip_input_plugin = { ...@@ -202,7 +194,6 @@ const InputPlugin zzip_input_plugin = {
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
zzip_input_close,
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
......
...@@ -271,7 +271,7 @@ decoder_run_stream(Decoder &decoder, const char *uri) ...@@ -271,7 +271,7 @@ decoder_run_stream(Decoder &decoder, const char *uri)
decoder_run_stream_fallback(decoder, *input_stream)); decoder_run_stream_fallback(decoder, *input_stream));
dc.Unlock(); dc.Unlock();
input_stream->Close(); delete input_stream;
dc.Lock(); dc.Lock();
return success; return success;
...@@ -318,7 +318,7 @@ TryDecoderFile(Decoder &decoder, Path path_fs, const char *suffix, ...@@ -318,7 +318,7 @@ TryDecoderFile(Decoder &decoder, Path path_fs, const char *suffix,
dc.Unlock(); dc.Unlock();
input_stream->Close(); delete input_stream;
if (success) { if (success) {
dc.Lock(); dc.Lock();
......
...@@ -467,7 +467,7 @@ wavpack_open_wvc(Decoder &decoder, const char *uri, ...@@ -467,7 +467,7 @@ wavpack_open_wvc(Decoder &decoder, const char *uri,
size_t nbytes = decoder_read(decoder, *is_wvc, size_t nbytes = decoder_read(decoder, *is_wvc,
&first_byte, sizeof(first_byte)); &first_byte, sizeof(first_byte));
if (nbytes == 0) { if (nbytes == 0) {
is_wvc->Close(); delete is_wvc;
return nullptr; return nullptr;
} }
...@@ -519,7 +519,7 @@ wavpack_streamdecode(Decoder &decoder, InputStream &is) ...@@ -519,7 +519,7 @@ wavpack_streamdecode(Decoder &decoder, InputStream &is)
WavpackCloseFile(wpc); WavpackCloseFile(wpc);
if (open_flags & OPEN_WVC) { if (open_flags & OPEN_WVC) {
is_wvc->Close(); delete is_wvc;
} }
} }
......
...@@ -82,7 +82,6 @@ struct InputPlugin { ...@@ -82,7 +82,6 @@ struct InputPlugin {
InputStream *(*open)(const char *uri, InputStream *(*open)(const char *uri,
Mutex &mutex, Cond &cond, Mutex &mutex, Cond &cond,
Error &error); Error &error);
void (*close)(InputStream *is);
/** /**
* Check for errors that may have occurred in the I/O thread. * Check for errors that may have occurred in the I/O thread.
......
...@@ -31,6 +31,10 @@ ...@@ -31,6 +31,10 @@
static constexpr Domain input_domain("input"); static constexpr Domain input_domain("input");
InputStream::~InputStream()
{
}
InputStream * InputStream *
InputStream::Open(const char *url, InputStream::Open(const char *url,
Mutex &mutex, Cond &cond, Mutex &mutex, Cond &cond,
...@@ -41,7 +45,6 @@ InputStream::Open(const char *url, ...@@ -41,7 +45,6 @@ InputStream::Open(const char *url,
is = plugin->open(url, mutex, cond, error); is = plugin->open(url, mutex, cond, error);
if (is != nullptr) { if (is != nullptr) {
assert(is->plugin.close != nullptr);
assert(is->plugin.read != nullptr); assert(is->plugin.read != nullptr);
assert(is->plugin.eof != nullptr); assert(is->plugin.eof != nullptr);
assert(!is->seekable || is->plugin.seek != nullptr); assert(!is->seekable || is->plugin.seek != nullptr);
...@@ -72,7 +75,7 @@ InputStream::OpenReady(const char *uri, ...@@ -72,7 +75,7 @@ InputStream::OpenReady(const char *uri,
mutex.unlock(); mutex.unlock();
if (!success) { if (!success) {
is->Close(); delete is;
is = nullptr; is = nullptr;
} }
...@@ -202,12 +205,6 @@ InputStream::LockRead(void *ptr, size_t _size, Error &error) ...@@ -202,12 +205,6 @@ InputStream::LockRead(void *ptr, size_t _size, Error &error)
return Read(ptr, _size, error); return Read(ptr, _size, error);
} }
void
InputStream::Close()
{
plugin.close(this);
}
bool bool
InputStream::IsEOF() InputStream::IsEOF()
{ {
......
...@@ -109,6 +109,13 @@ public: ...@@ -109,6 +109,13 @@ public:
} }
/** /**
* Close the input stream and free resources.
*
* The caller must not lock the mutex.
*/
virtual ~InputStream();
/**
* Opens a new input stream. You may not access it until the "ready" * Opens a new input stream. You may not access it until the "ready"
* flag is set. * flag is set.
* *
...@@ -133,13 +140,6 @@ public: ...@@ -133,13 +140,6 @@ public:
Mutex &mutex, Cond &cond, Mutex &mutex, Cond &cond,
Error &error); Error &error);
/**
* Close the input stream and free resources.
*
* The caller must not lock the mutex.
*/
void Close();
const InputPlugin &GetPlugin() const { const InputPlugin &GetPlugin() const {
return plugin; return plugin;
} }
......
...@@ -29,6 +29,15 @@ ...@@ -29,6 +29,15 @@
ThreadInputStream::~ThreadInputStream() ThreadInputStream::~ThreadInputStream()
{ {
Lock();
close = true;
wake_cond.signal();
Unlock();
Cancel();
thread.Join();
if (buffer != nullptr) { if (buffer != nullptr) {
buffer->Clear(); buffer->Clear();
HugeFree(buffer->Write().data, buffer_size); HugeFree(buffer->Write().data, buffer_size);
...@@ -172,28 +181,6 @@ ThreadInputStream::Read(InputStream *is, void *ptr, size_t size, ...@@ -172,28 +181,6 @@ ThreadInputStream::Read(InputStream *is, void *ptr, size_t size,
return tis.Read2(ptr, size, error); return tis.Read2(ptr, size, error);
} }
inline void
ThreadInputStream::Close2()
{
Lock();
close = true;
wake_cond.signal();
Unlock();
Cancel();
thread.Join();
delete this;
}
void
ThreadInputStream::Close(InputStream *is)
{
ThreadInputStream &tis = *(ThreadInputStream *)is;
tis.Close2();
}
inline bool inline bool
ThreadInputStream::IsEOF2() ThreadInputStream::IsEOF2()
{ {
......
...@@ -134,7 +134,6 @@ private: ...@@ -134,7 +134,6 @@ private:
bool Check2(Error &error); bool Check2(Error &error);
bool Available2(); bool Available2();
size_t Read2(void *ptr, size_t size, Error &error); size_t Read2(void *ptr, size_t size, Error &error);
void Close2();
bool IsEOF2(); bool IsEOF2();
public: public:
...@@ -143,7 +142,6 @@ public: ...@@ -143,7 +142,6 @@ public:
static bool Available(InputStream *is); static bool Available(InputStream *is);
static size_t Read(InputStream *is, void *ptr, size_t size, static size_t Read(InputStream *is, void *ptr, size_t size,
Error &error); Error &error);
static void Close(InputStream *is);
static bool IsEOF(InputStream *is); static bool IsEOF(InputStream *is);
}; };
......
...@@ -373,13 +373,6 @@ alsa_input_open(const char *uri, Mutex &mutex, Cond &cond, Error &error) ...@@ -373,13 +373,6 @@ alsa_input_open(const char *uri, Mutex &mutex, Cond &cond, Error &error)
return AlsaInputStream::Create(uri, mutex, cond, error); return AlsaInputStream::Create(uri, mutex, cond, error);
} }
static void
alsa_input_close(InputStream *is)
{
AlsaInputStream *ais = (AlsaInputStream *)is;
delete ais;
}
static bool static bool
alsa_input_available(InputStream *is) alsa_input_available(InputStream *is)
{ {
...@@ -406,7 +399,6 @@ const struct InputPlugin input_plugin_alsa = { ...@@ -406,7 +399,6 @@ const struct InputPlugin input_plugin_alsa = {
nullptr, nullptr,
nullptr, nullptr,
alsa_input_open, alsa_input_open,
alsa_input_close,
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
......
...@@ -96,5 +96,4 @@ const InputPlugin input_plugin_archive = { ...@@ -96,5 +96,4 @@ const InputPlugin input_plugin_archive = {
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
nullptr,
}; };
...@@ -105,14 +105,6 @@ input_cdio_init(const config_param &param, Error &error) ...@@ -105,14 +105,6 @@ input_cdio_init(const config_param &param, Error &error)
return InputPlugin::InitResult::SUCCESS; return InputPlugin::InitResult::SUCCESS;
} }
static void
input_cdio_close(InputStream *is)
{
CdioParanoiaInputStream *i = (CdioParanoiaInputStream *)is;
delete i;
}
struct cdio_uri { struct cdio_uri {
char device[64]; char device[64];
int track; int track;
...@@ -394,7 +386,6 @@ const InputPlugin input_plugin_cdio_paranoia = { ...@@ -394,7 +386,6 @@ const InputPlugin input_plugin_cdio_paranoia = {
input_cdio_init, input_cdio_init,
nullptr, nullptr,
input_cdio_open, input_cdio_open,
input_cdio_close,
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
......
...@@ -805,14 +805,6 @@ input_curl_read(InputStream *is, void *ptr, size_t size, ...@@ -805,14 +805,6 @@ input_curl_read(InputStream *is, void *ptr, size_t size,
return c.Read(ptr, size, error); return c.Read(ptr, size, error);
} }
static void
input_curl_close(InputStream *is)
{
CurlInputStream *c = (CurlInputStream *)is;
delete c;
}
static bool static bool
input_curl_eof(gcc_unused InputStream *is) input_curl_eof(gcc_unused InputStream *is)
{ {
...@@ -1144,7 +1136,6 @@ const struct InputPlugin input_plugin_curl = { ...@@ -1144,7 +1136,6 @@ const struct InputPlugin input_plugin_curl = {
input_curl_init, input_curl_init,
input_curl_finish, input_curl_finish,
input_curl_open, input_curl_open,
input_curl_close,
input_curl_check, input_curl_check,
nullptr, nullptr,
input_curl_tag, input_curl_tag,
......
...@@ -61,9 +61,7 @@ class DespotifyInputStream final : public InputStream { ...@@ -61,9 +61,7 @@ class DespotifyInputStream final : public InputStream {
} }
public: public:
~DespotifyInputStream() { ~DespotifyInputStream();
despotify_free_track(track);
}
static InputStream *Open(const char *url, Mutex &mutex, Cond &cond, static InputStream *Open(const char *url, Mutex &mutex, Cond &cond,
Error &error); Error &error);
...@@ -146,6 +144,12 @@ static void callback(gcc_unused struct despotify_session* ds, ...@@ -146,6 +144,12 @@ static void callback(gcc_unused struct despotify_session* ds,
ctx->Callback(sig); ctx->Callback(sig);
} }
DespotifyInputStream::~DespotifyInputStream()
{
mpd_despotify_unregister_callback(callback);
despotify_free_track(track);
}
inline InputStream * inline InputStream *
DespotifyInputStream::Open(const char *url, DespotifyInputStream::Open(const char *url,
Mutex &mutex, Cond &cond, Mutex &mutex, Cond &cond,
...@@ -220,15 +224,6 @@ input_despotify_read(InputStream *is, void *ptr, size_t size, Error &error) ...@@ -220,15 +224,6 @@ input_despotify_read(InputStream *is, void *ptr, size_t size, Error &error)
return ctx->Read(ptr, size, error); return ctx->Read(ptr, size, error);
} }
static void
input_despotify_close(InputStream *is)
{
DespotifyInputStream *ctx = (DespotifyInputStream *)is;
mpd_despotify_unregister_callback(callback);
delete ctx;
}
static bool static bool
input_despotify_eof(InputStream *is) input_despotify_eof(InputStream *is)
{ {
...@@ -250,7 +245,6 @@ const InputPlugin input_plugin_despotify = { ...@@ -250,7 +245,6 @@ const InputPlugin input_plugin_despotify = {
nullptr, nullptr,
nullptr, nullptr,
input_despotify_open, input_despotify_open,
input_despotify_close,
nullptr, nullptr,
nullptr, nullptr,
input_despotify_tag, input_despotify_tag,
......
...@@ -125,14 +125,6 @@ input_ffmpeg_read(InputStream *is, void *ptr, size_t size, ...@@ -125,14 +125,6 @@ input_ffmpeg_read(InputStream *is, void *ptr, size_t size,
return (size_t)ret; return (size_t)ret;
} }
static void
input_ffmpeg_close(InputStream *is)
{
FfmpegInputStream *i = (FfmpegInputStream *)is;
delete i;
}
static bool static bool
input_ffmpeg_eof(InputStream *is) input_ffmpeg_eof(InputStream *is)
{ {
...@@ -163,7 +155,6 @@ const InputPlugin input_plugin_ffmpeg = { ...@@ -163,7 +155,6 @@ const InputPlugin input_plugin_ffmpeg = {
input_ffmpeg_init, input_ffmpeg_init,
nullptr, nullptr,
input_ffmpeg_open, input_ffmpeg_open,
input_ffmpeg_close,
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
......
...@@ -123,14 +123,6 @@ input_file_read(InputStream *is, void *ptr, size_t size, ...@@ -123,14 +123,6 @@ input_file_read(InputStream *is, void *ptr, size_t size,
return (size_t)nbytes; return (size_t)nbytes;
} }
static void
input_file_close(InputStream *is)
{
FileInputStream *fis = (FileInputStream *)is;
delete fis;
}
static bool static bool
input_file_eof(InputStream *is) input_file_eof(InputStream *is)
{ {
...@@ -142,7 +134,6 @@ const InputPlugin input_plugin_file = { ...@@ -142,7 +134,6 @@ const InputPlugin input_plugin_file = {
nullptr, nullptr,
nullptr, nullptr,
input_file_open, input_file_open,
input_file_close,
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
......
...@@ -106,7 +106,6 @@ const InputPlugin input_plugin_mms = { ...@@ -106,7 +106,6 @@ const InputPlugin input_plugin_mms = {
nullptr, nullptr,
nullptr, nullptr,
input_mms_open, input_mms_open,
ThreadInputStream::Close,
ThreadInputStream::Check, ThreadInputStream::Check,
nullptr, nullptr,
nullptr, nullptr,
......
...@@ -156,13 +156,6 @@ input_nfs_read(InputStream *is, void *ptr, size_t size, ...@@ -156,13 +156,6 @@ input_nfs_read(InputStream *is, void *ptr, size_t size,
return s.Read(ptr, size, error); return s.Read(ptr, size, error);
} }
static void
input_nfs_close(InputStream *is)
{
NfsInputStream *s = (NfsInputStream *)is;
delete s;
}
static bool static bool
input_nfs_eof(InputStream *is) input_nfs_eof(InputStream *is)
{ {
...@@ -184,7 +177,6 @@ const InputPlugin input_plugin_nfs = { ...@@ -184,7 +177,6 @@ const InputPlugin input_plugin_nfs = {
nullptr, nullptr,
nullptr, nullptr,
input_nfs_open, input_nfs_open,
input_nfs_close,
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
......
...@@ -60,7 +60,7 @@ public: ...@@ -60,7 +60,7 @@ public:
} }
~RewindInputStream() { ~RewindInputStream() {
input->Close(); delete input;
} }
bool Check(Error &error) { bool Check(Error &error) {
...@@ -121,14 +121,6 @@ private: ...@@ -121,14 +121,6 @@ private:
} }
}; };
static void
input_rewind_close(InputStream *is)
{
RewindInputStream *r = (RewindInputStream *)is;
delete r;
}
static bool static bool
input_rewind_check(InputStream *is, Error &error) input_rewind_check(InputStream *is, Error &error)
{ {
...@@ -263,7 +255,6 @@ const InputPlugin rewind_input_plugin = { ...@@ -263,7 +255,6 @@ const InputPlugin rewind_input_plugin = {
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
input_rewind_close,
input_rewind_check, input_rewind_check,
input_rewind_update, input_rewind_update,
input_rewind_tag, input_rewind_tag,
......
...@@ -149,13 +149,6 @@ input_smbclient_read(InputStream *is, void *ptr, size_t size, ...@@ -149,13 +149,6 @@ input_smbclient_read(InputStream *is, void *ptr, size_t size,
return s.Read(ptr, size, error); return s.Read(ptr, size, error);
} }
static void
input_smbclient_close(InputStream *is)
{
SmbclientInputStream *s = (SmbclientInputStream *)is;
delete s;
}
static bool static bool
input_smbclient_eof(InputStream *is) input_smbclient_eof(InputStream *is)
{ {
...@@ -177,7 +170,6 @@ const InputPlugin input_plugin_smbclient = { ...@@ -177,7 +170,6 @@ const InputPlugin input_plugin_smbclient = {
input_smbclient_init, input_smbclient_init,
nullptr, nullptr,
input_smbclient_open, input_smbclient_open,
input_smbclient_close,
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
CloseSongEnumerator::~CloseSongEnumerator() CloseSongEnumerator::~CloseSongEnumerator()
{ {
delete other; delete other;
is->Close(); delete is;
} }
DetachedSong * DetachedSong *
......
...@@ -50,7 +50,7 @@ playlist_open_path_suffix(const char *path_fs, Mutex &mutex, Cond &cond) ...@@ -50,7 +50,7 @@ playlist_open_path_suffix(const char *path_fs, Mutex &mutex, Cond &cond)
if (playlist != nullptr) if (playlist != nullptr)
playlist = new CloseSongEnumerator(playlist, is); playlist = new CloseSongEnumerator(playlist, is);
else else
is->Close(); delete is;
return playlist; return playlist;
} }
...@@ -85,7 +85,7 @@ playlist_open_remote(const char *uri, Mutex &mutex, Cond &cond) ...@@ -85,7 +85,7 @@ playlist_open_remote(const char *uri, Mutex &mutex, Cond &cond)
playlist = playlist_list_open_stream(*is, uri); playlist = playlist_list_open_stream(*is, uri);
if (playlist == nullptr) { if (playlist == nullptr) {
is->Close(); delete is;
return nullptr; return nullptr;
} }
......
...@@ -276,7 +276,7 @@ soundcloud_parse_json(const char *url, yajl_handle hand, ...@@ -276,7 +276,7 @@ soundcloud_parse_json(const char *url, yajl_handle hand,
done = true; done = true;
} else { } else {
mutex.unlock(); mutex.unlock();
input_stream->Close(); delete input_stream;
return -1; return -1;
} }
} }
...@@ -304,7 +304,7 @@ soundcloud_parse_json(const char *url, yajl_handle hand, ...@@ -304,7 +304,7 @@ soundcloud_parse_json(const char *url, yajl_handle hand,
} }
mutex.unlock(); mutex.unlock();
input_stream->Close(); delete input_stream;
return 0; return 0;
} }
......
...@@ -105,7 +105,7 @@ int main(int argc, char **argv) ...@@ -105,7 +105,7 @@ int main(int argc, char **argv)
playlist = playlist_list_open_stream(*is, uri); playlist = playlist_list_open_stream(*is, uri);
if (playlist == NULL) { if (playlist == NULL) {
is->Close(); delete is;
fprintf(stderr, "Failed to open playlist\n"); fprintf(stderr, "Failed to open playlist\n");
return 2; return 2;
} }
...@@ -139,8 +139,7 @@ int main(int argc, char **argv) ...@@ -139,8 +139,7 @@ int main(int argc, char **argv)
/* deinitialize everything */ /* deinitialize everything */
delete playlist; delete playlist;
if (is != NULL) delete is;
is->Close();
decoder_plugin_deinit_all(); decoder_plugin_deinit_all();
playlist_list_global_finish(); playlist_list_global_finish();
......
...@@ -112,7 +112,7 @@ int main(int argc, char **argv) ...@@ -112,7 +112,7 @@ int main(int argc, char **argv)
InputStream *is = InputStream::OpenReady(argv[1], mutex, cond, error); InputStream *is = InputStream::OpenReady(argv[1], mutex, cond, error);
if (is != NULL) { if (is != NULL) {
ret = dump_input_stream(*is); ret = dump_input_stream(*is);
is->Close(); delete is;
} else { } else {
if (error.IsDefined()) if (error.IsDefined())
LogError(error); LogError(error);
......
...@@ -127,7 +127,7 @@ int main(int argc, char **argv) ...@@ -127,7 +127,7 @@ int main(int argc, char **argv)
} }
success = plugin->ScanStream(*is, print_handler, nullptr); success = plugin->ScanStream(*is, print_handler, nullptr);
is->Close(); delete is;
} }
decoder_plugin_deinit_all(); decoder_plugin_deinit_all();
......
...@@ -230,7 +230,7 @@ int main(int argc, char **argv) ...@@ -230,7 +230,7 @@ int main(int argc, char **argv)
decoder.plugin->StreamDecode(decoder, *is); decoder.plugin->StreamDecode(decoder, *is);
is->Close(); delete is;
} else { } else {
fprintf(stderr, "Decoder plugin is not usable\n"); fprintf(stderr, "Decoder plugin is not usable\n");
return EXIT_FAILURE; return EXIT_FAILURE;
......
...@@ -132,7 +132,7 @@ int main(int argc, char **argv) ...@@ -132,7 +132,7 @@ int main(int argc, char **argv)
is = InputStream::OpenReady(argv[1], mutex, cond, error); is = InputStream::OpenReady(argv[1], mutex, cond, error);
if (is != NULL) { if (is != NULL) {
ret = dump_input_stream(is); ret = dump_input_stream(is);
is->Close(); delete is;
} else { } else {
if (error.IsDefined()) if (error.IsDefined())
LogError(error); LogError(error);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment