Fixed logging thread safety issues.

This commit is contained in:
Thulinma 2014-09-07 22:59:37 +02:00
parent c33c62c6d4
commit 4e705195a8
2 changed files with 8 additions and 4 deletions

View file

@ -274,6 +274,7 @@ int main(int argc, char ** argv){
//write config
if ( !Controller::WriteFile(Controller::conf.getString("configFile"), Controller::Storage.toString())){
std::cerr << "Error writing config " << Controller::conf.getString("configFile") << std::endl;
tthread::lock_guard<tthread::mutex> guard(Controller::logMutex);
Controller::Storage.removeMember("log");
for (JSON::ObjIter it = Controller::Storage["streams"].ObjBegin(); it != Controller::Storage["streams"].ObjEnd(); it++){
it->second.removeMember("meta");

View file

@ -318,10 +318,13 @@ int Controller::handleAPIConnection(Socket::Connection & conn){
/// ~~~~~~~~~~~~~~~
/// It's possible to clear the stored logs by sending an empty `"clearstatlogs"` request.
///
Response["log"] = Controller::Storage["log"];
//clear log and statistics if requested
if (Request.isMember("clearstatlogs")){
Controller::Storage["log"].null();
{
tthread::lock_guard<tthread::mutex> guard(logMutex);
Response["log"] = Controller::Storage["log"];
//clear log if requested
if (Request.isMember("clearstatlogs")){
Controller::Storage["log"].null();
}
}
if (Request.isMember("clients")){
if (Request["clients"].isArray()){