summaryrefslogtreecommitdiff
path: root/src/libaudcore/playlist-cache.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libaudcore/playlist-cache.cc')
-rw-r--r--src/libaudcore/playlist-cache.cc65
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();
}