Clients clients;
+boost::shared_mutex big_mutex;
+
+
void
Client::introspect(DBus::Connection& conn, DBus::Message& msg)
{
{
y2deb("ListConfigs");
+ boost::shared_lock<boost::shared_mutex> lock(big_mutex);
+
list<ConfigInfo> config_infos = Snapper::getConfigs(); // TODO
DBus::MessageMethodReturn reply(msg);
y2deb("GetConfig config_name:" << config_name);
- MetaSnappers::iterator it = meta_snappers.find(config_name);
+ boost::shared_lock<boost::shared_mutex> lock(big_mutex);
+
+ MetaSnappers::const_iterator it = meta_snappers.find(config_name);
check_permission(conn, msg, *it);
y2deb("CreateConfig config_name:" << config_name << " subvolume:" << subvolume <<
" fstype:" << fstype << " template_name:" << template_name);
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
check_permission(conn, msg);
Snapper::createConfig(config_name, subvolume, fstype, template_name);
y2deb("DeleteConfig config_name:" << config_name);
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
check_permission(conn, msg);
Snapper::deleteConfig(config_name);
y2deb("LockConfig config_name:" << config_name);
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
MetaSnappers::iterator it = meta_snappers.find(config_name);
check_permission(conn, msg, *it);
y2deb("UnlockConfig config_name:" << config_name);
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
MetaSnappers::iterator it = meta_snappers.find(config_name);
check_permission(conn, msg, *it);
y2deb("ListSnapshots config_name:" << config_name);
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
MetaSnappers::iterator it = meta_snappers.find(config_name);
check_permission(conn, msg, *it);
y2deb("GetSnapshot config_name:" << config_name << " num:" << num);
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
MetaSnappers::iterator it = meta_snappers.find(config_name);
check_permission(conn, msg, *it);
y2deb("SetSnapshot config_name:" << config_name << " num:" << num);
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
MetaSnappers::iterator it = meta_snappers.find(config_name);
check_permission(conn, msg, *it);
y2deb("CreateSingleSnapshot config_name:" << config_name << " description:" << description <<
" cleanup:" << cleanup);
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
MetaSnappers::iterator it = meta_snappers.find(config_name);
check_permission(conn, msg, *it);
y2deb("CreatePreSnapshot config_name:" << config_name << " description:" << description <<
" cleanup:" << cleanup);
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
MetaSnappers::iterator it = meta_snappers.find(config_name);
check_permission(conn, msg, *it);
y2deb("CreatePostSnapshot config_name:" << config_name << " pre_num:" << pre_num <<
" description:" << description << " cleanup:" << cleanup);
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
MetaSnappers::iterator it = meta_snappers.find(config_name);
check_permission(conn, msg, *it);
y2deb("DeleteSnapshots config_name:" << config_name << " nums:" << nums);
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
check_lock(conn, msg, config_name);
MetaSnappers::iterator it = meta_snappers.find(config_name);
y2deb("MountSnapshot config_name:" << config_name << " num:" << num);
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
MetaSnappers::iterator it = meta_snappers.find(config_name);
check_permission(conn, msg, *it);
y2deb("UmountSnapshot config_name:" << config_name << " num:" << num);
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
MetaSnappers::iterator it = meta_snappers.find(config_name);
check_permission(conn, msg, *it);
DBus::Hihi hihi(msg);
hihi >> config_name >> num1 >> num2;
- y2deb("CreateComparison config_name:" << config_name << " num1:" << num1 <<
- " num2:" << num2);
+ y2deb("CreateComparison config_name:" << config_name << " num1:" << num1 << " num2:" << num2);
+
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
MetaSnappers::iterator it = meta_snappers.find(config_name);
Snapshots::const_iterator snapshot1 = snapshots.find(num1);
Snapshots::const_iterator snapshot2 = snapshots.find(num2);
+ lock.unlock();
+
Comparison* comparison = new Comparison(snapper, snapshot1, snapshot2);
+ lock.lock();
+
comparisons.push_back(comparison);
DBus::MessageMethodReturn reply(msg);
DBus::Hihi hihi(msg);
hihi >> config_name >> num1 >> num2;
- y2deb("GetFiles config_name:" << config_name << " num1:" << num1 << " num2:" <<
- num2);
+ y2deb("GetFiles config_name:" << config_name << " num1:" << num1 << " num2:" << num2);
+
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
MetaSnappers::iterator it = meta_snappers.find(config_name);
DBus::Hihi hihi(msg);
hihi >> config_name >> num1 >> num2 >> filename >> options;
- y2deb("GetDiff config_name:" << config_name << " num1:" << num1 << " num2:" <<
- num2 << " filename:" << filename << " options:" << options);
+ y2deb("GetDiff config_name:" << config_name << " num1:" << num1 << " num2:" << num2 <<
+ " filename:" << filename << " options:" << options);
+
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
MetaSnappers::iterator it = meta_snappers.find(config_name);
Files::iterator it3 = files.find(filename);
assert(it3 != files.end());
+ lock.unlock();
+
vector<string> d = it3->getDiff(options);
+ lock.lock();
+
DBus::MessageMethodReturn reply(msg);
DBus::Hoho hoho(reply);
DBus::Hihi hihi(msg);
hihi >> config_name >> num1 >> num2 >> undos;
- y2deb("SetUndo config_name:" << config_name << " num1:" << num1 << " num2:" <<
- num2);
+ y2deb("SetUndo config_name:" << config_name << " num1:" << num1 << " num2:" << num2);
+
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
MetaSnappers::iterator it = meta_snappers.find(config_name);
DBus::Hihi hihi(msg);
hihi >> config_name >> num1 >> num2 >> undo;
- y2deb("SetUndoAll config_name:" << config_name << " num1:" << num1 << " num2:" <<
- num2);
+ y2deb("SetUndoAll config_name:" << config_name << " num1:" << num1 << " num2:" << num2);
+
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
MetaSnappers::iterator it = meta_snappers.find(config_name);
DBus::Hihi hihi(msg);
hihi >> config_name >> num1 >> num2;
- y2deb("GetUndoSteps config_name:" << config_name << " num1:" << num1 << " num2:" <<
- num2);
+ y2deb("GetUndoSteps config_name:" << config_name << " num1:" << num1 << " num2:" << num2);
+
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
MetaSnappers::iterator it = meta_snappers.find(config_name);
y2deb("DoUndoStep config_name:" << config_name << " num1:" << num1 << " num2:" << num2);
+ boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
MetaSnappers::iterator it = meta_snappers.find(config_name);
check_permission(conn, msg, *it);
Comparison* comparison = find_comparison(it->getSnapper(), num1, num2);
+ lock.unlock();
+
bool ret = comparison->doUndoStep(undo_step);
+ lock.lock();
+
DBus::MessageMethodReturn reply(msg);
DBus::Hoho hoho(reply);
void
Client::debug(DBus::Connection& conn, DBus::Message& msg)
{
+ y2deb("Debug");
+
+ boost::shared_lock<boost::shared_mutex> lock(big_mutex);
+
check_permission(conn, msg);
DBus::MessageMethodReturn reply(msg);