@@ -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
0 commit comments