Skip to content

Commit f511e89

Browse files
committed
Revert PR #3049
1 parent 1437cb2 commit f511e89

File tree

4 files changed

+11
-73
lines changed

4 files changed

+11
-73
lines changed

include/spdlog/async_logger-inl.h

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,13 @@ SPDLOG_LOGGER_CATCH(msg.source)
4343
}
4444

4545
// send flush request to the thread pool
46-
SPDLOG_INLINE void spdlog::async_logger::flush_(){SPDLOG_TRY{auto pool_ptr = thread_pool_.lock();
47-
if (!pool_ptr) {
46+
SPDLOG_INLINE void spdlog::async_logger::flush_(){
47+
SPDLOG_TRY{if (auto pool_ptr = thread_pool_.lock()){
48+
pool_ptr->post_flush(shared_from_this(), overflow_policy_);
49+
}
50+
else {
4851
throw_spdlog_ex("async flush: thread pool doesn't exist anymore");
4952
}
50-
51-
std::future<void> future = pool_ptr->post_flush(shared_from_this(), overflow_policy_);
52-
// Wait for the flush operation to complete.
53-
// This might throw exception if the flush message get dropped because of overflow.
54-
future.get();
5553
}
5654
SPDLOG_LOGGER_CATCH(source_loc())
5755
}

include/spdlog/details/thread_pool-inl.h

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,9 @@ void SPDLOG_INLINE thread_pool::post_log(async_logger_ptr &&worker_ptr,
6262
post_async_msg_(std::move(async_m), overflow_policy);
6363
}
6464

65-
std::future<void> SPDLOG_INLINE thread_pool::post_flush(async_logger_ptr &&worker_ptr,
66-
async_overflow_policy overflow_policy) {
67-
std::promise<void> promise;
68-
std::future<void> future = promise.get_future();
69-
post_async_msg_(async_msg(std::move(worker_ptr), async_msg_type::flush, std::move(promise)),
70-
overflow_policy);
71-
return future;
65+
void SPDLOG_INLINE thread_pool::post_flush(async_logger_ptr &&worker_ptr,
66+
async_overflow_policy overflow_policy) {
67+
post_async_msg_(async_msg(std::move(worker_ptr), async_msg_type::flush), overflow_policy);
7268
}
7369

7470
size_t SPDLOG_INLINE thread_pool::overrun_counter() { return q_.overrun_counter(); }
@@ -112,7 +108,6 @@ bool SPDLOG_INLINE thread_pool::process_next_msg_() {
112108
}
113109
case async_msg_type::flush: {
114110
incoming_async_msg.worker_ptr->backend_flush_();
115-
incoming_async_msg.flush_promise.set_value();
116111
return true;
117112
}
118113

include/spdlog/details/thread_pool.h

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
#include <chrono>
1111
#include <functional>
12-
#include <future>
1312
#include <memory>
1413
#include <thread>
1514
#include <vector>
@@ -28,7 +27,6 @@ enum class async_msg_type { log, flush, terminate };
2827
struct async_msg : log_msg_buffer {
2928
async_msg_type msg_type{async_msg_type::log};
3029
async_logger_ptr worker_ptr;
31-
std::promise<void> flush_promise;
3230

3331
async_msg() = default;
3432
~async_msg() = default;
@@ -58,20 +56,12 @@ struct async_msg : log_msg_buffer {
5856
async_msg(async_logger_ptr &&worker, async_msg_type the_type, const details::log_msg &m)
5957
: log_msg_buffer{m},
6058
msg_type{the_type},
61-
worker_ptr{std::move(worker)},
62-
flush_promise{} {}
59+
worker_ptr{std::move(worker)} {}
6360

6461
async_msg(async_logger_ptr &&worker, async_msg_type the_type)
6562
: log_msg_buffer{},
6663
msg_type{the_type},
67-
worker_ptr{std::move(worker)},
68-
flush_promise{} {}
69-
70-
async_msg(async_logger_ptr &&worker, async_msg_type the_type, std::promise<void> &&promise)
71-
: log_msg_buffer{},
72-
msg_type{the_type},
73-
worker_ptr{std::move(worker)},
74-
flush_promise{std::move(promise)} {}
64+
worker_ptr{std::move(worker)} {}
7565

7666
explicit async_msg(async_msg_type the_type)
7767
: async_msg{nullptr, the_type} {}
@@ -98,8 +88,7 @@ class SPDLOG_API thread_pool {
9888
void post_log(async_logger_ptr &&worker_ptr,
9989
const details::log_msg &msg,
10090
async_overflow_policy overflow_policy);
101-
std::future<void> post_flush(async_logger_ptr &&worker_ptr,
102-
async_overflow_policy overflow_policy);
91+
void post_flush(async_logger_ptr &&worker_ptr, async_overflow_policy overflow_policy);
10392
size_t overrun_counter();
10493
void reset_overrun_counter();
10594
size_t discard_counter();

tests/test_async.cpp

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -93,50 +93,6 @@ TEST_CASE("flush", "[async]") {
9393
REQUIRE(test_sink->flush_counter() == 1);
9494
}
9595

96-
TEST_CASE("multithread flush", "[async]") {
97-
auto test_sink = std::make_shared<spdlog::sinks::test_sink_mt>();
98-
size_t queue_size = 2;
99-
size_t messages = 10;
100-
size_t n_threads = 10;
101-
size_t flush_count = 1024;
102-
std::mutex mtx;
103-
std::vector<std::string> errmsgs;
104-
{
105-
auto tp = std::make_shared<spdlog::details::thread_pool>(queue_size, 1);
106-
auto logger = std::make_shared<spdlog::async_logger>(
107-
"as", test_sink, tp, spdlog::async_overflow_policy::discard_new);
108-
109-
logger->set_error_handler([&](const std::string &) {
110-
std::unique_lock<std::mutex> lock(mtx);
111-
errmsgs.push_back("Broken promise");
112-
});
113-
114-
for (size_t i = 0; i < messages; i++) {
115-
logger->info("Hello message #{}", i);
116-
}
117-
118-
std::vector<std::thread> threads;
119-
for (size_t i = 0; i < n_threads; i++) {
120-
threads.emplace_back([logger, flush_count] {
121-
for (size_t j = 0; j < flush_count; j++) {
122-
// flush does not throw exception even if failed.
123-
// Instead, the error handler is invoked.
124-
logger->flush();
125-
}
126-
});
127-
}
128-
129-
for (auto &t : threads) {
130-
t.join();
131-
}
132-
}
133-
REQUIRE(test_sink->flush_counter() >= 1);
134-
REQUIRE(test_sink->flush_counter() + errmsgs.size() == n_threads * flush_count);
135-
if (errmsgs.size() > 0) {
136-
REQUIRE(errmsgs[0] == "Broken promise");
137-
}
138-
}
139-
14096
TEST_CASE("async periodic flush", "[async]") {
14197
auto logger = spdlog::create_async<spdlog::sinks::test_sink_mt>("as");
14298
auto test_sink = std::static_pointer_cast<spdlog::sinks::test_sink_mt>(logger->sinks()[0]);

0 commit comments

Comments
 (0)