aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/db/SimpleDatabasePlugin.cxx17
-rw-r--r--src/db_lock.h15
2 files changed, 21 insertions, 11 deletions
diff --git a/src/db/SimpleDatabasePlugin.cxx b/src/db/SimpleDatabasePlugin.cxx
index 54441f4c..1e5ffe9b 100644
--- a/src/db/SimpleDatabasePlugin.cxx
+++ b/src/db/SimpleDatabasePlugin.cxx
@@ -250,11 +250,8 @@ SimpleDatabase::LookupDirectory(const char *uri) const
assert(root != NULL);
assert(uri != NULL);
- db_lock();
- struct directory *directory =
- directory_lookup_directory(root, uri);
- db_unlock();
- return directory;
+ ScopeDatabaseLock protect;
+ return directory_lookup_directory(root, uri);
}
bool
@@ -281,12 +278,10 @@ SimpleDatabase::Visit(const DatabaseSelection &selection,
!visit_directory(*directory, error_r))
return false;
- db_lock();
- bool ret = directory->Walk(selection.recursive, selection.filter,
- visit_directory, visit_song, visit_playlist,
- error_r);
- db_unlock();
- return ret;
+ ScopeDatabaseLock protect;
+ return directory->Walk(selection.recursive, selection.filter,
+ visit_directory, visit_song, visit_playlist,
+ error_r);
}
bool
diff --git a/src/db_lock.h b/src/db_lock.h
index 4640502f..eed71eec 100644
--- a/src/db_lock.h
+++ b/src/db_lock.h
@@ -81,4 +81,19 @@ db_unlock(void)
g_static_mutex_unlock(&db_mutex);
}
+#ifdef __cplusplus
+
+class ScopeDatabaseLock {
+public:
+ ScopeDatabaseLock() {
+ db_lock();
+ }
+
+ ~ScopeDatabaseLock() {
+ db_unlock();
+ }
+};
+
+#endif
+
#endif