diff options
Diffstat (limited to 'src/libaudcore/playlist-cache.cc')
-rw-r--r-- | src/libaudcore/playlist-cache.cc | 65 |
1 files changed, 28 insertions, 37 deletions
diff --git a/src/libaudcore/playlist-cache.cc b/src/libaudcore/playlist-cache.cc index fe371ac..1cf8035 100644 --- a/src/libaudcore/playlist-cache.cc +++ b/src/libaudcore/playlist-cache.cc @@ -17,72 +17,63 @@ * the use of this software. */ -#include "playlist-internal.h" #include "mainloop.h" #include "multihash.h" - -#include <pthread.h> +#include "playlist-internal.h" +#include "threads.h" static SimpleHash<String, PlaylistAddItem> cache; -static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; +static aud::mutex mutex; static QueuedFunc clear_timer; -EXPORT void Playlist::cache_selected () const +EXPORT void Playlist::cache_selected() const { - pthread_mutex_lock (& mutex); - - int entries = n_entries (); + auto mh = mutex.take(); + int entries = n_entries(); - for (int i = 0; i < entries; i ++) + for (int i = 0; i < entries; i++) { - if (! entry_selected (i)) + if (!entry_selected(i)) continue; - String filename = entry_filename (i); - Tuple tuple = entry_tuple (i, NoWait); - PluginHandle * decoder = entry_decoder (i, NoWait); + String filename = entry_filename(i); + Tuple tuple = entry_tuple(i, NoWait); + PluginHandle * decoder = entry_decoder(i, NoWait); - if (tuple.valid () || decoder) - cache.add (filename, {filename, std::move (tuple), decoder}); + if (tuple.valid() || decoder) + cache.add(filename, {filename, std::move(tuple), decoder}); } - clear_timer.queue (30000, playlist_cache_clear, nullptr); - - pthread_mutex_unlock (& mutex); + clear_timer.queue(30000, playlist_cache_clear, nullptr); } -void playlist_cache_load (Index<PlaylistAddItem> & items) +void playlist_cache_load(Index<PlaylistAddItem> & items) { - pthread_mutex_lock (& mutex); + auto mh = mutex.take(); - if (! cache.n_items ()) - goto out; + if (!cache.n_items()) + return; for (auto & item : items) { - if (item.tuple.valid () && item.decoder) + if (item.tuple.valid() && item.decoder) continue; - auto node = cache.lookup (item.filename); - if (! node) + auto node = cache.lookup(item.filename); + if (!node) continue; - if (! item.tuple.valid () && node->tuple.valid ()) - item.tuple = node->tuple.ref (); - if (! item.decoder && node->decoder) + if (!item.tuple.valid() && node->tuple.valid()) + item.tuple = node->tuple.ref(); + if (!item.decoder && node->decoder) item.decoder = node->decoder; } - -out: - pthread_mutex_unlock (& mutex); } -void playlist_cache_clear (void *) +void playlist_cache_clear(void *) { - pthread_mutex_lock (& mutex); - - cache.clear (); - clear_timer.stop (); + auto mh = mutex.take(); - pthread_mutex_unlock (& mutex); + cache.clear(); + clear_timer.stop(); } |