#include <functional>
#include <memory>
+#include <mutex>
#include <regex>
#include <string>
#include <unordered_map>
#include <vector>
+
#include "rocksdb/status.h"
namespace ROCKSDB_NAMESPACE {
// Adds the input entry to the list for the given type
void AddEntry(const std::string& type, std::unique_ptr<Entry>& entry);
+ // Protects the entry map
+ mutable std::mutex mu_;
// ** FactoryFunctions for this loader, organized by type
std::unordered_map<std::string, std::vector<std::unique_ptr<Entry>>> entries_;
// Otherwise, nullptr is returned
const ObjectLibrary::Entry *ObjectLibrary::FindEntry(
const std::string &type, const std::string &name) const {
+ std::unique_lock<std::mutex> lock(mu_);
auto entries = entries_.find(type);
if (entries != entries_.end()) {
for (const auto &entry : entries->second) {
void ObjectLibrary::AddEntry(const std::string &type,
std::unique_ptr<Entry> &entry) {
+ std::unique_lock<std::mutex> lock(mu_);
auto &entries = entries_[type];
entries.emplace_back(std::move(entry));
}
size_t ObjectLibrary::GetFactoryCount(size_t *types) const {
+ std::unique_lock<std::mutex> lock(mu_);
*types = entries_.size();
size_t factories = 0;
for (const auto &e : entries_) {
}
void ObjectLibrary::Dump(Logger *logger) const {
+ std::unique_lock<std::mutex> lock(mu_);
for (const auto &iter : entries_) {
ROCKS_LOG_HEADER(logger, " Registered factories for type[%s] ",
iter.first.c_str());