forked from Mirrorlandia_minetest/minetest
Fix deadlock if MeshUpdateThread asks new textures while it is being stopped (happened if texture data was transferred slowly)
This commit is contained in:
parent
8b8ef8acc0
commit
b6539399f4
@ -1519,7 +1519,12 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
|
|||||||
std::istringstream is(datastring, std::ios_base::binary);
|
std::istringstream is(datastring, std::ios_base::binary);
|
||||||
|
|
||||||
// Stop threads while updating content definitions
|
// Stop threads while updating content definitions
|
||||||
m_mesh_update_thread.stop();
|
m_mesh_update_thread.setRun(false);
|
||||||
|
// Process the remaining TextureSource queue to let MeshUpdateThread
|
||||||
|
// get it's remaining textures and thus let it stop
|
||||||
|
while(m_mesh_update_thread.IsRunning()){
|
||||||
|
m_tsrc->processQueue();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
u16 command
|
u16 command
|
||||||
@ -1595,8 +1600,13 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
|
|||||||
m_tooldef_received = true;
|
m_tooldef_received = true;
|
||||||
|
|
||||||
// Stop threads while updating content definitions
|
// Stop threads while updating content definitions
|
||||||
m_mesh_update_thread.stop();
|
m_mesh_update_thread.setRun(false);
|
||||||
|
// Process the remaining TextureSource queue to let MeshUpdateThread
|
||||||
|
// get it's remaining textures and thus let it stop
|
||||||
|
while(m_mesh_update_thread.IsRunning()){
|
||||||
|
m_tsrc->processQueue();
|
||||||
|
}
|
||||||
|
|
||||||
std::istringstream tmp_is(deSerializeLongString(is), std::ios::binary);
|
std::istringstream tmp_is(deSerializeLongString(is), std::ios::binary);
|
||||||
m_tooldef->deSerialize(tmp_is);
|
m_tooldef->deSerialize(tmp_is);
|
||||||
|
|
||||||
@ -1644,8 +1654,13 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
|
|||||||
m_craftitemdef_received = true;
|
m_craftitemdef_received = true;
|
||||||
|
|
||||||
// Stop threads while updating content definitions
|
// Stop threads while updating content definitions
|
||||||
m_mesh_update_thread.stop();
|
m_mesh_update_thread.setRun(false);
|
||||||
|
// Process the remaining TextureSource queue to let MeshUpdateThread
|
||||||
|
// get it's remaining textures and thus let it stop
|
||||||
|
while(m_mesh_update_thread.IsRunning()){
|
||||||
|
m_tsrc->processQueue();
|
||||||
|
}
|
||||||
|
|
||||||
std::istringstream tmp_is(deSerializeLongString(is), std::ios::binary);
|
std::istringstream tmp_is(deSerializeLongString(is), std::ios::binary);
|
||||||
m_craftitemdef->deSerialize(tmp_is);
|
m_craftitemdef->deSerialize(tmp_is);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user