db_lock: add C++ helper class ScopeDatabaseLock
This commit is contained in:
@@ -250,11 +250,8 @@ SimpleDatabase::LookupDirectory(const char *uri) const
|
|||||||
assert(root != NULL);
|
assert(root != NULL);
|
||||||
assert(uri != NULL);
|
assert(uri != NULL);
|
||||||
|
|
||||||
db_lock();
|
ScopeDatabaseLock protect;
|
||||||
struct directory *directory =
|
return directory_lookup_directory(root, uri);
|
||||||
directory_lookup_directory(root, uri);
|
|
||||||
db_unlock();
|
|
||||||
return directory;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@@ -281,12 +278,10 @@ SimpleDatabase::Visit(const DatabaseSelection &selection,
|
|||||||
!visit_directory(*directory, error_r))
|
!visit_directory(*directory, error_r))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
db_lock();
|
ScopeDatabaseLock protect;
|
||||||
bool ret = directory->Walk(selection.recursive, selection.filter,
|
return directory->Walk(selection.recursive, selection.filter,
|
||||||
visit_directory, visit_song, visit_playlist,
|
visit_directory, visit_song, visit_playlist,
|
||||||
error_r);
|
error_r);
|
||||||
db_unlock();
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@@ -81,4 +81,19 @@ db_unlock(void)
|
|||||||
g_static_mutex_unlock(&db_mutex);
|
g_static_mutex_unlock(&db_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
class ScopeDatabaseLock {
|
||||||
|
public:
|
||||||
|
ScopeDatabaseLock() {
|
||||||
|
db_lock();
|
||||||
|
}
|
||||||
|
|
||||||
|
~ScopeDatabaseLock() {
|
||||||
|
db_unlock();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user