Skip to content

Commit cd7e0c5

Browse files
committed
fix some data race
1 parent 01a63cb commit cd7e0c5

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

include/ylt/easylog/appender.hpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ class appender {
179179

180180
template <bool sync = false, bool enable_console = false>
181181
void write_record(record_t &record) {
182-
std::lock_guard guard(get_mutex<sync>());
182+
std::unique_lock guard(get_mutex<sync>());
183183
if constexpr (sync == true) {
184184
if (max_files_ > 0 && file_size_ > max_file_size_ &&
185185
static_cast<size_t>(-1) != file_size_) {
@@ -204,6 +204,8 @@ class appender {
204204
write_file(msg);
205205

206206
if constexpr (enable_console) {
207+
guard.unlock();
208+
std::unique_lock guard1(get_mutex<true>());
207209
add_color(record.get_severity());
208210
std::cout << time_str;
209211
clean_color(record.get_severity());
@@ -405,7 +407,7 @@ class appender {
405407
bool has_init_ = false;
406408
std::string filename_;
407409

408-
bool enable_console_ = false;
410+
std::atomic<bool> enable_console_ = false;
409411
bool flush_every_time_;
410412
size_t file_size_ = 0;
411413
size_t max_file_size_ = 0;

include/ylt/standalone/cinatra/session_manager.hpp

+8
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ class session_manager {
6060
}
6161

6262
void start_check_session_timer() {
63+
std::lock_guard lock(timer_mtx_);
6364
std::weak_ptr<asio::steady_timer> timer = check_session_timer_;
6465
check_session_timer_->expires_after(check_session_duration_);
6566
check_session_timer_->async_wait([this, timer](auto ec) {
@@ -79,6 +80,12 @@ class session_manager {
7980

8081
void set_check_session_duration(auto duration) {
8182
check_session_duration_ = duration;
83+
{
84+
std::lock_guard lock(timer_mtx_);
85+
std::error_code ec;
86+
check_session_timer_->cancel(ec);
87+
}
88+
8289
start_check_session_timer();
8390
}
8491

@@ -100,6 +107,7 @@ class session_manager {
100107
// session_timeout_ should be no less than 0
101108
std::size_t session_timeout_ = 86400;
102109
std::atomic<bool> stop_timer_ = false;
110+
std::mutex timer_mtx_;
103111
std::shared_ptr<asio::steady_timer> check_session_timer_;
104112
std::atomic<std::chrono::steady_clock::duration> check_session_duration_ = {
105113
std::chrono::seconds(15)};

0 commit comments

Comments
 (0)