Skip to content

Commit 796a77a

Browse files
committed
fix: better logic using submit_task and logging player name
1 parent 0a0e24f commit 796a77a

2 files changed

Lines changed: 16 additions & 17 deletions

File tree

src/game/scheduling/save_manager.cpp

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,34 +30,24 @@ void SaveManager::saveAll() {
3030
logger.info("Saving server...");
3131
Benchmark bm_players;
3232
const auto &players = game.getPlayers();
33-
std::vector<std::future<void>> futures;
33+
std::vector<std::pair<std::future<void>, std::string>> pending;
3434
const auto asyncSave = g_configManager().getBoolean(TOGGLE_SAVE_ASYNC);
3535
logger.info("Saving {} players... (Async: {})", players.size(), asyncSave ? "Enabled" : "Disabled");
36+
std::vector<std::future<void>> futures;
3637
for (const auto &[_, player] : players) {
3738
player->loginPosition = player->getPosition();
3839

39-
auto promise = std::make_shared<std::promise<void>>();
40-
futures.push_back(promise->get_future());
41-
42-
threadPool.detach_task([this, player, promise]() {
43-
try {
44-
doSavePlayer(player);
45-
promise->set_value();
46-
} catch (const std::exception &e) {
47-
logger.error("Exception occurred while saving player {}: {}", player->getName(), e.what());
48-
promise->set_exception(std::current_exception());
49-
} catch (...) {
50-
logger.error("Unknown error occurred while saving player {}.", player->getName());
51-
promise->set_exception(std::current_exception());
52-
}
40+
auto fut = threadPool.submit_task([this, player] {
41+
doSavePlayer(player);
5342
});
43+
pending.emplace_back(std::move(fut), player->getName());
5444
}
5545

56-
for (auto &future : futures) {
46+
for (auto &[future, name] : pending) {
5747
try {
5848
future.get();
5949
} catch (const std::exception &e) {
60-
logger.error("Failed to save player due to exception: {}", e.what());
50+
logger.error("Failed to save player {}: {}", name, e.what());
6151
}
6252
}
6353

src/lib/thread/thread_pool.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@ class ThreadPool {
3131
return pool->submit_loop(first, last, std::forward<F>(f));
3232
}
3333

34+
template <typename F, typename... Args>
35+
auto submit_task(F &&f, Args &&... args) {
36+
return pool->submit_task(std::forward<F>(f), std::forward<Args>(args)...);
37+
}
38+
39+
void wait_for_tasks() {
40+
pool->wait();
41+
}
42+
3443
auto get_thread_count() const noexcept {
3544
return pool->get_thread_count();
3645
}

0 commit comments

Comments
 (0)