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_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};
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user