Merge pull request #73214 from reduz/prevent-recursive-importing-hack

Prevent recursive importing (hack)
This commit is contained in:
Rémi Verschelde 2023-02-13 18:23:35 +01:00 committed by GitHub
commit cf859db34a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 21 additions and 3 deletions

View File

@ -1237,10 +1237,23 @@ void EditorFileSystem::_notification(int p_what) {
case NOTIFICATION_PROCESS: {
if (use_threads) {
/** This hack exists because of the EditorProgress nature
* of processing events recursively. This needs to be rewritten
* at some point entirely, but in the meantime the following
* hack prevents deadlock on import.
*/
static bool prevent_recursive_process_hack = false;
if (prevent_recursive_process_hack) {
break;
}
prevent_recursive_process_hack = true;
bool done_importing = false;
if (scanning_changes) {
if (scanning_changes_done) {
scanning_changes = false;
set_process(false);
thread_sources.wait_to_finish();
@ -1251,6 +1264,8 @@ void EditorFileSystem::_notification(int p_what) {
}
emit_signal(SNAME("sources_changed"), sources_changed.size() > 0);
first_scan = false;
scanning_changes = false; // Changed to false here to prevent recursive triggering of scan thread.
done_importing = true;
}
} else if (!scanning && thread.is_started()) {
set_process(false);
@ -1268,10 +1283,12 @@ void EditorFileSystem::_notification(int p_what) {
first_scan = false;
}
if (!is_processing() && scan_changes_pending) {
if (done_importing && scan_changes_pending) {
scan_changes_pending = false;
scan_changes();
}
prevent_recursive_process_hack = false;
}
} break;
}
@ -2180,6 +2197,7 @@ void EditorFileSystem::_reimport_thread(uint32_t p_index, ImportThreadData *p_im
}
void EditorFileSystem::reimport_files(const Vector<String> &p_files) {
ERR_FAIL_COND_MSG(importing, "Attempted to call reimport_files() recursively, this is not allowed.");
importing = true;
Vector<String> reloads;