From 5fe253662973713e6d92e294b5c0e0e25ea64165 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Tue, 24 Feb 2015 16:03:32 +0100 Subject: [PATCH] Add missing locks in ApiListener::UpdateConfigDir --- lib/remote/apilistener-sync.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/lib/remote/apilistener-sync.cpp b/lib/remote/apilistener-sync.cpp index 6ae194a45..0b4e02689 100644 --- a/lib/remote/apilistener-sync.cpp +++ b/lib/remote/apilistener-sync.cpp @@ -72,22 +72,26 @@ bool ApiListener::UpdateConfigDir(const Dictionary::Ptr& oldConfig, const Dictio return false; } - BOOST_FOREACH(const Dictionary::Pair& kv, newConfig) { - if (oldConfig->Get(kv.first) != kv.second) { - configChange = true; + { + ObjectLock olock(newConfig); + BOOST_FOREACH(const Dictionary::Pair& kv, newConfig) { + if (oldConfig->Get(kv.first) != kv.second) { + configChange = true; - String path = configDir + "/" + kv.first; - Log(LogInformation, "ApiListener") - << "Updating configuration file: " << path; + String path = configDir + "/" + kv.first; + Log(LogInformation, "ApiListener") + << "Updating configuration file: " << path; - //pass the directory and generate a dir tree, if not existing already - Utility::MkDirP(Utility::DirName(path), 0755); - std::ofstream fp(path.CStr(), std::ofstream::out | std::ostream::binary | std::ostream::trunc); - fp << kv.second; - fp.close(); + //pass the directory and generate a dir tree, if not existing already + Utility::MkDirP(Utility::DirName(path), 0755); + std::ofstream fp(path.CStr(), std::ofstream::out | std::ostream::binary | std::ostream::trunc); + fp << kv.second; + fp.close(); + } } } + ObjectLock xlock(oldConfig); BOOST_FOREACH(const Dictionary::Pair& kv, oldConfig) { if (!newConfig->Contains(kv.first)) { configChange = true;