aboutsummaryrefslogtreecommitdiff
path: root/src/client/tile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/tile.cpp')
-rw-r--r--src/client/tile.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/client/tile.cpp b/src/client/tile.cpp
index 582219bb8..d36459bb2 100644
--- a/src/client/tile.cpp
+++ b/src/client/tile.cpp
@@ -405,7 +405,7 @@ private:
std::mutex m_textureinfo_cache_mutex;
// Queued texture fetches (to be processed by the main thread)
- RequestQueue<std::string, u32, u8, u8> m_get_texture_queue;
+ RequestQueue<std::string, u32, std::thread::id, u8> m_get_texture_queue;
// Textures that have been overwritten with other ones
// but can't be deleted because the ITexture* might still be used
@@ -491,16 +491,16 @@ u32 TextureSource::getTextureId(const std::string &name)
infostream<<"getTextureId(): Queued: name=\""<<name<<"\""<<std::endl;
// We're gonna ask the result to be put into here
- static thread_local ResultQueue<std::string, u32, u8, u8> result_queue;
+ static thread_local ResultQueue<std::string, u32, std::thread::id, u8> result_queue;
// Throw a request in
- m_get_texture_queue.add(name, 0, 0, &result_queue);
+ m_get_texture_queue.add(name, std::this_thread::get_id(), 0, &result_queue);
try {
while(true) {
- // Wait for result for up to 4 seconds (empirical value)
- GetResult<std::string, u32, u8, u8>
- result = result_queue.pop_front(4000);
+ // Wait for result for up to 1 seconds (empirical value)
+ GetResult<std::string, u32, std::thread::id, u8>
+ result = result_queue.pop_front(1000);
if (result.key == name) {
return result.item;
@@ -726,10 +726,10 @@ void TextureSource::processQueue()
/*
Fetch textures
*/
- //NOTE this is only thread safe for ONE consumer thread!
- if (!m_get_texture_queue.empty())
+ // NOTE: process outstanding requests from all mesh generation threads
+ while (!m_get_texture_queue.empty())
{
- GetRequest<std::string, u32, u8, u8>
+ GetRequest<std::string, u32, std::thread::id, u8>
request = m_get_texture_queue.pop();
/*infostream<<"TextureSource::processQueue(): "