Skip to content

Commit

Permalink
фикс вылета из-за ошибки памяти реплея
Browse files Browse the repository at this point in the history
  • Loading branch information
HPW-dev committed Sep 16, 2024
1 parent aa03df3 commit a5a0c65
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 5 deletions.
9 changes: 5 additions & 4 deletions src/game/scene/scene-game.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -313,9 +313,12 @@ void Scene_game::replay_init() {
void Scene_game::save_named_replay() {
assert(hpw::enable_replay);
return_if(!hpw::replay);

try {
// реплей сейвится при закрытии
hpw::replay->close();
hpw::replay = {};

if (hpw::save_last_replay) {
// открыть файл последнего реплея и скопировать в именной файл
std::ifstream source(hpw::cur_dir + hpw::replays_path + "last_replay.hpw_replay", std::ios::binary);
Expand All @@ -329,10 +332,8 @@ void Scene_game::save_named_replay() {
dest << source.rdbuf();
}
} catch (cr<hpw::Error> err) {
// TODO окно с ошибкой
hpw_log("ошибка при сохранении реплея: " << err.what() << "\n");
hpw::user_warnings = U"ошибка при сохранении реплея: " + utf8_to_32(err.what()) + U"\n";
} catch (...) {
// TODO окно с ошибкой
hpw_log("неизвестная ошибка при сохранении реплея\n");
hpw::user_warnings = U"неизвестная ошибка при сохранении реплея\n";
}
}
7 changes: 6 additions & 1 deletion src/game/util/replay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,12 @@ struct Replay::Impl {
return_if(m_file.data.empty());

// чтоб два раза не вызвать close
Scope _({}, [this]{ m_file.data.clear(); });
Scope _({}, [this]{
m_file.data.clear();
hpw::replay_read_mode = false;
this->m_info = {};
this->m_path = {};
});

// запись с буффера на диск
std::ofstream file(m_path, std::ios_base::binary);
Expand Down

0 comments on commit a5a0c65

Please sign in to comment.