Hello: I have a simple class to do simple thread-safe logging using recursive_mutex as shown below. The problem is, once in a while, it causes any thread to die while it tries to log. I haven't been able to isolate why this happens. Is recursive_mutex being used correctly? The logging is done like so: extern FileLogger &TheLog() { static g_log("my.log"); return g_log; } TheLog() << "Hello World" << endl; I am using boost 1_28 with MSVC 6 SP5. ---------------------------------------------------------------------------- ------------------ #include <fstream> #include <string> #include "boost/thread/recursive_mutex.hpp" class FileLogger { public: // set second arg = false to do no logging. FileLogger(const std::string &logName, bool log=true) : log_(log) { if (log_) { strm_.open(logName.c_str(), std::ios::ate); } } // logging can be accessed from any thread. template <typename T> std::ostream & operator<< (T d) { if (log_) { boost::recursive_mutex::scoped_lock l(strmMutex_); strm_ << d; } return strm_; } ~FileLogger() { if (log_) { strm_.close(); } } private: std::ofstream strm_; boost::recursive_mutex strmMutex_; bool log_; };