Skip to content

Commit

Permalink
ResourceLoader: Let resource setup late steps invoke loading in turn
Browse files Browse the repository at this point in the history
  • Loading branch information
RandomShaper committed Jul 29, 2024
1 parent 88d9325 commit 5640e8a
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion core/io/resource_loader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,14 @@ void ResourceLoader::_thread_load_function(void *p_userdata) {

bool ignoring = load_task.cache_mode == ResourceFormatLoader::CACHE_MODE_IGNORE || load_task.cache_mode == ResourceFormatLoader::CACHE_MODE_IGNORE_DEEP;
bool replacing = load_task.cache_mode == ResourceFormatLoader::CACHE_MODE_REPLACE || load_task.cache_mode == ResourceFormatLoader::CACHE_MODE_REPLACE_DEEP;
bool unlock_pending = true;
if (load_task.resource.is_valid()) {
// From now on, no critical section needed as no one will write to the task anymore.
// Moreover, the mutex being unlocked is a requirement if some of the calls below
// that set the resource up invoke code that in turn requests resource loading.
thread_load_mutex.unlock();
unlock_pending = false;

if (!ignoring) {
if (replacing) {
Ref<Resource> old_res = ResourceCache::get_ref(load_task.local_path);
Expand Down Expand Up @@ -383,13 +390,18 @@ void ResourceLoader::_thread_load_function(void *p_userdata) {
load_task.status = THREAD_LOAD_LOADED;
load_task.progress = 1.0;

thread_load_mutex.unlock();
unlock_pending = false;

if (_loaded_callback) {
_loaded_callback(load_task.resource, load_task.local_path);
}
}
}

thread_load_mutex.unlock();
if (unlock_pending) {
thread_load_mutex.unlock();
}

if (load_nesting == 0) {
if (own_mq_override) {
Expand Down

0 comments on commit 5640e8a

Please sign in to comment.