Removed race condition with destruction and cleaning up sinks.

Using string instead of stream
This commit is contained in:
KjellKod 2013-08-18 23:15:09 -06:00
parent 8a36ef87ea
commit b490624ea0
2 changed files with 28 additions and 12 deletions

View File

@ -34,8 +34,7 @@ struct g2LogWorkerImpl {
g2LogWorkerImpl() : _bg(kjellkod::Active::createActive()) { }
~g2LogWorkerImpl() {
_bg.reset();
_sinks.clear();
_bg->send([this]{_sinks.clear(); });
}
void bgSave(g2::internal::LogEntry msg) {
@ -44,19 +43,18 @@ struct g2LogWorkerImpl {
}
if (_sinks.empty()) {
std::ostringstream err_msg;
err_msg << "g2logworker has no sinks. Message: [" << msg << "]" << std::endl;
std::cerr << err_msg.str();
std::string err_msg{"g2logworker has no sinks. Message: ["};
err_msg.append(msg).append({"]\n"});
std::cerr << err_msg;
}
}
void bgFatal(g2::internal::FatalMessage fatal_message) {
auto entry = fatal_message.message_;
bgSave(entry);
std::ostringstream end_message;
end_message << "Exiting after fatal event. Log flushed sucessfully t disk.\n";
bgSave(end_message.str());
std::cerr << "g2log sinks are flushed. Now exiting after receiving fatal event" << std::endl;
std::string end_message{"Exiting after fatal event. Log flushed sucessfully to disk.\n"};
bgSave(end_message);
std::cerr << "g2log sinks are flushed. Now exiting after receiving fatal event\n" << std::flush;
_sinks.clear(); // flush all queues
exitWithDefaultSignalHandler(fatal_message.signal_id_);

View File

@ -59,7 +59,25 @@ public:
addWrappedSink(sink);
return std2::make_unique < SinkHandle < T >> (sink);
}
};
};
//problemet är att det verkar inte som om min sink avslutas. är det p.g.a. shared_ptr_
//printout från g2FileSink borde synas
//Tips. Gör unit test massvis med loggers som tar in bolean ref som sätts i destruktorn
//
//1. fixa filechange testet först
//2. sen jämför mitt andra projekt och wrapper.h .
// speciellt main, addSink och de underliggande funktionerna
//
//3) ha worker i wrapper som en unik inte shared klass.
//
// När allt är klart:
// a) överväg att istället för pair ha en strukt med namnet
// defaultlogger med samma API som dagens logger.
//
//b) andra logger creation skapar inte en DefaultLogger utan en
//Logger
//
//4) n när allt fungerar bör namnen ändras.
//filnamnen borde heta g2...
//klassnamnen borde heta g2::whatever inte g2::g2Whate
#endif // LOG_WORKER_H_