mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-06-18 00:27:02 +08:00
fix: potential data race in m_gen_player_pos
This commit is contained in:
@@ -31,6 +31,7 @@ private:
|
||||
std::mutex m_gen_signal_mutex;
|
||||
std::mutex m_new_chunk_queue_mutex;
|
||||
std::mutex m_delete_vbo_mutex;
|
||||
std::mutex m_gen_player_pos_mutex;
|
||||
std::vector<GLuint> m_pending_delete_vbo;
|
||||
std::condition_variable m_gen_cv;
|
||||
std::atomic<bool> m_gen_running{false};
|
||||
|
||||
@@ -169,8 +169,12 @@ ChunkPos World::chunk_pos(int world_x, int world_z) {
|
||||
}
|
||||
|
||||
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 z = std::floor(player_pos.z);
|
||||
@@ -293,7 +297,11 @@ void World::stop_gen_thread() {
|
||||
}
|
||||
|
||||
void World::need_gen() {
|
||||
{
|
||||
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_gen_cv.notify_one();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user