From 82337dec44347017ca04fe975e85e6d9e4edb635 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sun, 11 May 2014 16:59:19 +0200 Subject: InputStream: add virtual destructor Replaces the method Close(). --- src/input/InputPlugin.hxx | 1 - src/input/InputStream.cxx | 13 +++++------ src/input/InputStream.hxx | 14 ++++++------ src/input/ThreadInputStream.cxx | 31 ++++++++------------------- src/input/ThreadInputStream.hxx | 2 -- src/input/plugins/AlsaInputPlugin.cxx | 8 ------- src/input/plugins/ArchiveInputPlugin.cxx | 1 - src/input/plugins/CdioParanoiaInputPlugin.cxx | 9 -------- src/input/plugins/CurlInputPlugin.cxx | 9 -------- src/input/plugins/DespotifyInputPlugin.cxx | 20 ++++++----------- src/input/plugins/FfmpegInputPlugin.cxx | 9 -------- src/input/plugins/FileInputPlugin.cxx | 9 -------- src/input/plugins/MmsInputPlugin.cxx | 1 - src/input/plugins/NfsInputPlugin.cxx | 8 ------- src/input/plugins/RewindInputPlugin.cxx | 11 +--------- src/input/plugins/SmbclientInputPlugin.cxx | 8 ------- 16 files changed, 29 insertions(+), 125 deletions(-) (limited to 'src/input') diff --git a/src/input/InputPlugin.hxx b/src/input/InputPlugin.hxx index 412ca4cf9..449604434 100644 --- a/src/input/InputPlugin.hxx +++ b/src/input/InputPlugin.hxx @@ -82,7 +82,6 @@ struct InputPlugin { InputStream *(*open)(const char *uri, Mutex &mutex, Cond &cond, Error &error); - void (*close)(InputStream *is); /** * Check for errors that may have occurred in the I/O thread. diff --git a/src/input/InputStream.cxx b/src/input/InputStream.cxx index d54eca643..2e0df6856 100644 --- a/src/input/InputStream.cxx +++ b/src/input/InputStream.cxx @@ -31,6 +31,10 @@ static constexpr Domain input_domain("input"); +InputStream::~InputStream() +{ +} + InputStream * InputStream::Open(const char *url, Mutex &mutex, Cond &cond, @@ -41,7 +45,6 @@ InputStream::Open(const char *url, is = plugin->open(url, mutex, cond, error); if (is != nullptr) { - assert(is->plugin.close != nullptr); assert(is->plugin.read != nullptr); assert(is->plugin.eof != nullptr); assert(!is->seekable || is->plugin.seek != nullptr); @@ -72,7 +75,7 @@ InputStream::OpenReady(const char *uri, mutex.unlock(); if (!success) { - is->Close(); + delete is; is = nullptr; } @@ -202,12 +205,6 @@ InputStream::LockRead(void *ptr, size_t _size, Error &error) return Read(ptr, _size, error); } -void -InputStream::Close() -{ - plugin.close(this); -} - bool InputStream::IsEOF() { diff --git a/src/input/InputStream.hxx b/src/input/InputStream.hxx index 65840ba27..4a9d7832a 100644 --- a/src/input/InputStream.hxx +++ b/src/input/InputStream.hxx @@ -108,6 +108,13 @@ public: assert(_uri != nullptr); } + /** + * 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" * flag is set. @@ -133,13 +140,6 @@ public: Mutex &mutex, Cond &cond, Error &error); - /** - * Close the input stream and free resources. - * - * The caller must not lock the mutex. - */ - void Close(); - const InputPlugin &GetPlugin() const { return plugin; } diff --git a/src/input/ThreadInputStream.cxx b/src/input/ThreadInputStream.cxx index 0f503be3f..408b757f9 100644 --- a/src/input/ThreadInputStream.cxx +++ b/src/input/ThreadInputStream.cxx @@ -29,6 +29,15 @@ ThreadInputStream::~ThreadInputStream() { + Lock(); + close = true; + wake_cond.signal(); + Unlock(); + + Cancel(); + + thread.Join(); + if (buffer != nullptr) { buffer->Clear(); HugeFree(buffer->Write().data, buffer_size); @@ -172,28 +181,6 @@ ThreadInputStream::Read(InputStream *is, void *ptr, size_t size, 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 ThreadInputStream::IsEOF2() { diff --git a/src/input/ThreadInputStream.hxx b/src/input/ThreadInputStream.hxx index 63cdd5003..2354000f6 100644 --- a/src/input/ThreadInputStream.hxx +++ b/src/input/ThreadInputStream.hxx @@ -134,7 +134,6 @@ private: bool Check2(Error &error); bool Available2(); size_t Read2(void *ptr, size_t size, Error &error); - void Close2(); bool IsEOF2(); public: @@ -143,7 +142,6 @@ public: static bool Available(InputStream *is); static size_t Read(InputStream *is, void *ptr, size_t size, Error &error); - static void Close(InputStream *is); static bool IsEOF(InputStream *is); }; diff --git a/src/input/plugins/AlsaInputPlugin.cxx b/src/input/plugins/AlsaInputPlugin.cxx index c1ff41d55..2049c5635 100644 --- a/src/input/plugins/AlsaInputPlugin.cxx +++ b/src/input/plugins/AlsaInputPlugin.cxx @@ -373,13 +373,6 @@ alsa_input_open(const char *uri, Mutex &mutex, Cond &cond, Error &error) return AlsaInputStream::Create(uri, mutex, cond, error); } -static void -alsa_input_close(InputStream *is) -{ - AlsaInputStream *ais = (AlsaInputStream *)is; - delete ais; -} - static bool alsa_input_available(InputStream *is) { @@ -406,7 +399,6 @@ const struct InputPlugin input_plugin_alsa = { nullptr, nullptr, alsa_input_open, - alsa_input_close, nullptr, nullptr, nullptr, diff --git a/src/input/plugins/ArchiveInputPlugin.cxx b/src/input/plugins/ArchiveInputPlugin.cxx index f49669674..8a8be5b2f 100644 --- a/src/input/plugins/ArchiveInputPlugin.cxx +++ b/src/input/plugins/ArchiveInputPlugin.cxx @@ -96,5 +96,4 @@ const InputPlugin input_plugin_archive = { nullptr, nullptr, nullptr, - nullptr, }; diff --git a/src/input/plugins/CdioParanoiaInputPlugin.cxx b/src/input/plugins/CdioParanoiaInputPlugin.cxx index 8e1762427..c5b238320 100644 --- a/src/input/plugins/CdioParanoiaInputPlugin.cxx +++ b/src/input/plugins/CdioParanoiaInputPlugin.cxx @@ -105,14 +105,6 @@ input_cdio_init(const config_param ¶m, Error &error) return InputPlugin::InitResult::SUCCESS; } -static void -input_cdio_close(InputStream *is) -{ - CdioParanoiaInputStream *i = (CdioParanoiaInputStream *)is; - - delete i; -} - struct cdio_uri { char device[64]; int track; @@ -394,7 +386,6 @@ const InputPlugin input_plugin_cdio_paranoia = { input_cdio_init, nullptr, input_cdio_open, - input_cdio_close, nullptr, nullptr, nullptr, diff --git a/src/input/plugins/CurlInputPlugin.cxx b/src/input/plugins/CurlInputPlugin.cxx index 63fb84190..fa93a1d7e 100644 --- a/src/input/plugins/CurlInputPlugin.cxx +++ b/src/input/plugins/CurlInputPlugin.cxx @@ -805,14 +805,6 @@ input_curl_read(InputStream *is, void *ptr, size_t size, return c.Read(ptr, size, error); } -static void -input_curl_close(InputStream *is) -{ - CurlInputStream *c = (CurlInputStream *)is; - - delete c; -} - static bool input_curl_eof(gcc_unused InputStream *is) { @@ -1144,7 +1136,6 @@ const struct InputPlugin input_plugin_curl = { input_curl_init, input_curl_finish, input_curl_open, - input_curl_close, input_curl_check, nullptr, input_curl_tag, diff --git a/src/input/plugins/DespotifyInputPlugin.cxx b/src/input/plugins/DespotifyInputPlugin.cxx index 16ef07f0d..86fbbbad3 100644 --- a/src/input/plugins/DespotifyInputPlugin.cxx +++ b/src/input/plugins/DespotifyInputPlugin.cxx @@ -61,9 +61,7 @@ class DespotifyInputStream final : public InputStream { } public: - ~DespotifyInputStream() { - despotify_free_track(track); - } + ~DespotifyInputStream(); static InputStream *Open(const char *url, Mutex &mutex, Cond &cond, Error &error); @@ -146,6 +144,12 @@ static void callback(gcc_unused struct despotify_session* ds, ctx->Callback(sig); } +DespotifyInputStream::~DespotifyInputStream() +{ + mpd_despotify_unregister_callback(callback); + despotify_free_track(track); +} + inline InputStream * DespotifyInputStream::Open(const char *url, Mutex &mutex, Cond &cond, @@ -220,15 +224,6 @@ input_despotify_read(InputStream *is, void *ptr, size_t size, Error &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 input_despotify_eof(InputStream *is) { @@ -250,7 +245,6 @@ const InputPlugin input_plugin_despotify = { nullptr, nullptr, input_despotify_open, - input_despotify_close, nullptr, nullptr, input_despotify_tag, diff --git a/src/input/plugins/FfmpegInputPlugin.cxx b/src/input/plugins/FfmpegInputPlugin.cxx index affd76718..366a99f46 100644 --- a/src/input/plugins/FfmpegInputPlugin.cxx +++ b/src/input/plugins/FfmpegInputPlugin.cxx @@ -125,14 +125,6 @@ input_ffmpeg_read(InputStream *is, void *ptr, size_t size, return (size_t)ret; } -static void -input_ffmpeg_close(InputStream *is) -{ - FfmpegInputStream *i = (FfmpegInputStream *)is; - - delete i; -} - static bool input_ffmpeg_eof(InputStream *is) { @@ -163,7 +155,6 @@ const InputPlugin input_plugin_ffmpeg = { input_ffmpeg_init, nullptr, input_ffmpeg_open, - input_ffmpeg_close, nullptr, nullptr, nullptr, diff --git a/src/input/plugins/FileInputPlugin.cxx b/src/input/plugins/FileInputPlugin.cxx index 932db2150..e96347c6e 100644 --- a/src/input/plugins/FileInputPlugin.cxx +++ b/src/input/plugins/FileInputPlugin.cxx @@ -123,14 +123,6 @@ input_file_read(InputStream *is, void *ptr, size_t size, return (size_t)nbytes; } -static void -input_file_close(InputStream *is) -{ - FileInputStream *fis = (FileInputStream *)is; - - delete fis; -} - static bool input_file_eof(InputStream *is) { @@ -142,7 +134,6 @@ const InputPlugin input_plugin_file = { nullptr, nullptr, input_file_open, - input_file_close, nullptr, nullptr, nullptr, diff --git a/src/input/plugins/MmsInputPlugin.cxx b/src/input/plugins/MmsInputPlugin.cxx index d4095b2cb..a5d4bc09d 100644 --- a/src/input/plugins/MmsInputPlugin.cxx +++ b/src/input/plugins/MmsInputPlugin.cxx @@ -106,7 +106,6 @@ const InputPlugin input_plugin_mms = { nullptr, nullptr, input_mms_open, - ThreadInputStream::Close, ThreadInputStream::Check, nullptr, nullptr, diff --git a/src/input/plugins/NfsInputPlugin.cxx b/src/input/plugins/NfsInputPlugin.cxx index 9b5ca5959..19eda0605 100644 --- a/src/input/plugins/NfsInputPlugin.cxx +++ b/src/input/plugins/NfsInputPlugin.cxx @@ -156,13 +156,6 @@ input_nfs_read(InputStream *is, void *ptr, size_t size, return s.Read(ptr, size, error); } -static void -input_nfs_close(InputStream *is) -{ - NfsInputStream *s = (NfsInputStream *)is; - delete s; -} - static bool input_nfs_eof(InputStream *is) { @@ -184,7 +177,6 @@ const InputPlugin input_plugin_nfs = { nullptr, nullptr, input_nfs_open, - input_nfs_close, nullptr, nullptr, nullptr, diff --git a/src/input/plugins/RewindInputPlugin.cxx b/src/input/plugins/RewindInputPlugin.cxx index 9665615f8..b1ec3ab62 100644 --- a/src/input/plugins/RewindInputPlugin.cxx +++ b/src/input/plugins/RewindInputPlugin.cxx @@ -60,7 +60,7 @@ public: } ~RewindInputStream() { - input->Close(); + delete input; } bool Check(Error &error) { @@ -121,14 +121,6 @@ private: } }; -static void -input_rewind_close(InputStream *is) -{ - RewindInputStream *r = (RewindInputStream *)is; - - delete r; -} - static bool input_rewind_check(InputStream *is, Error &error) { @@ -263,7 +255,6 @@ const InputPlugin rewind_input_plugin = { nullptr, nullptr, nullptr, - input_rewind_close, input_rewind_check, input_rewind_update, input_rewind_tag, diff --git a/src/input/plugins/SmbclientInputPlugin.cxx b/src/input/plugins/SmbclientInputPlugin.cxx index c291f0608..07ffb83c4 100644 --- a/src/input/plugins/SmbclientInputPlugin.cxx +++ b/src/input/plugins/SmbclientInputPlugin.cxx @@ -149,13 +149,6 @@ input_smbclient_read(InputStream *is, void *ptr, size_t size, return s.Read(ptr, size, error); } -static void -input_smbclient_close(InputStream *is) -{ - SmbclientInputStream *s = (SmbclientInputStream *)is; - delete s; -} - static bool input_smbclient_eof(InputStream *is) { @@ -177,7 +170,6 @@ const InputPlugin input_plugin_smbclient = { input_smbclient_init, nullptr, input_smbclient_open, - input_smbclient_close, nullptr, nullptr, nullptr, -- cgit v1.2.3