|
|
@@ -38,6 +38,7 @@ ResourceLoader::ResourceLoader(Filesystem& data_filesystem)
|
|
|
ResourceLoader::~ResourceLoader()
|
|
|
{
|
|
|
_exit = true;
|
|
|
+ _requests_condition.signal(); // Spurious wake to exit thread
|
|
|
_thread.stop();
|
|
|
}
|
|
|
|
|
|
@@ -45,6 +46,7 @@ void ResourceLoader::add_request(const ResourceRequest& rr)
|
|
|
{
|
|
|
ScopedMutex sm(_mutex);
|
|
|
queue::push_back(_requests, rr);
|
|
|
+ _requests_condition.signal();
|
|
|
}
|
|
|
|
|
|
void ResourceLoader::flush()
|
|
|
@@ -85,15 +87,14 @@ void ResourceLoader::register_fallback(StringId64 type, StringId64 name)
|
|
|
|
|
|
s32 ResourceLoader::run()
|
|
|
{
|
|
|
- while (!_exit)
|
|
|
+ while (1)
|
|
|
{
|
|
|
_mutex.lock();
|
|
|
- if (queue::empty(_requests))
|
|
|
- {
|
|
|
- _mutex.unlock();
|
|
|
- os::sleep(16);
|
|
|
- continue;
|
|
|
- }
|
|
|
+ while (queue::empty(_requests) && !_exit)
|
|
|
+ _requests_condition.wait(_mutex);
|
|
|
+
|
|
|
+ if (_exit)
|
|
|
+ break;
|
|
|
|
|
|
ResourceRequest rr = queue::front(_requests);
|
|
|
_mutex.unlock();
|
|
|
@@ -146,6 +147,7 @@ s32 ResourceLoader::run()
|
|
|
_mutex.unlock();
|
|
|
}
|
|
|
|
|
|
+ _mutex.unlock();
|
|
|
return 0;
|
|
|
}
|
|
|
|