fix: potential data race in m_gen_player_pos

This commit is contained in:
2026-04-14 09:42:12 +08:00
parent 16ff954166
commit 6773157000
2 changed files with 12 additions and 3 deletions

View File

@@ -31,6 +31,7 @@ private:
std::mutex m_gen_signal_mutex; std::mutex m_gen_signal_mutex;
std::mutex m_new_chunk_queue_mutex; std::mutex m_new_chunk_queue_mutex;
std::mutex m_delete_vbo_mutex; std::mutex m_delete_vbo_mutex;
std::mutex m_gen_player_pos_mutex;
std::vector<GLuint> m_pending_delete_vbo; std::vector<GLuint> m_pending_delete_vbo;
std::condition_variable m_gen_cv; std::condition_variable m_gen_cv;
std::atomic<bool> m_gen_running{false}; std::atomic<bool> m_gen_running{false};

View File

@@ -169,8 +169,12 @@ ChunkPos World::chunk_pos(int world_x, int world_z) {
} }
void World::gen_chunks_internal() { void World::gen_chunks_internal() {
glm::vec3 player_pos;
{
std::lock_guard lk(m_gen_player_pos_mutex);
player_pos = m_gen_player_pos;
}
const auto& player_pos = m_gen_player_pos;
int x = std::floor(player_pos.x); int x = std::floor(player_pos.x);
int z = std::floor(player_pos.z); int z = std::floor(player_pos.z);
@@ -293,7 +297,11 @@ void World::stop_gen_thread() {
} }
void World::need_gen() { void World::need_gen() {
m_gen_player_pos = get_player("TestPlayer").get_player_pos(); {
std::lock_guard lk(m_gen_player_pos_mutex);
m_gen_player_pos = get_player("TestPlayer").get_player_pos();
}
m_need_gen_chunk = true; m_need_gen_chunk = true;
m_gen_cv.notify_one(); m_gen_cv.notify_one();
} }