Fixed copy ctor of err_helper to be thread safe

gabime/visibilty-2.x
gabime 7 months ago
parent 62bbd87bdb
commit 80f00797e3

@ -15,9 +15,10 @@ namespace details {
class SPDLOG_API err_helper {
err_handler custom_err_handler_;
std::chrono::steady_clock::time_point last_report_time_;
std::mutex mutex_;
mutable std::mutex mutex_;
public:
err_helper() = default;
~err_helper() = default;
err_helper(const err_helper& other);
err_helper(err_helper&& other) noexcept;
void handle_ex(const std::string& origin, const source_loc& loc, const std::exception& ex) noexcept;

@ -8,13 +8,16 @@
namespace spdlog {
namespace details {
err_helper::err_helper(const err_helper &other)
: custom_err_handler_(other.custom_err_handler_),
last_report_time_(other.last_report_time_) {}
err_helper::err_helper(const err_helper &other) {
std::lock_guard lock(other.mutex_);
custom_err_handler_ = other.custom_err_handler_;
last_report_time_ = other.last_report_time_;
}
err_helper::err_helper(err_helper &&other) noexcept
: custom_err_handler_(std::move(other.custom_err_handler_)),
last_report_time_(other.last_report_time_) {}
err_helper::err_helper(err_helper &&other) noexcept {
custom_err_handler_ = std::move(other.custom_err_handler_);
last_report_time_ = std::move(other.last_report_time_);
}
// Prints error to stderr with source location (if available). A stderr sink is not used because reaching
// this point might indicate a problem with the logging system itself so we use fputs() directly.

Loading…
Cancel
Save