Merge pull request #73214 from reduz/prevent-recursive-importing-hack
Prevent recursive importing (hack)
This commit is contained in:
commit
cf859db34a
@ -1237,10 +1237,23 @@ void EditorFileSystem::_notification(int p_what) {
|
|||||||
|
|
||||||
case NOTIFICATION_PROCESS: {
|
case NOTIFICATION_PROCESS: {
|
||||||
if (use_threads) {
|
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) {
|
||||||
if (scanning_changes_done) {
|
if (scanning_changes_done) {
|
||||||
scanning_changes = false;
|
|
||||||
|
|
||||||
set_process(false);
|
set_process(false);
|
||||||
|
|
||||||
thread_sources.wait_to_finish();
|
thread_sources.wait_to_finish();
|
||||||
@ -1251,6 +1264,8 @@ void EditorFileSystem::_notification(int p_what) {
|
|||||||
}
|
}
|
||||||
emit_signal(SNAME("sources_changed"), sources_changed.size() > 0);
|
emit_signal(SNAME("sources_changed"), sources_changed.size() > 0);
|
||||||
first_scan = false;
|
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()) {
|
} else if (!scanning && thread.is_started()) {
|
||||||
set_process(false);
|
set_process(false);
|
||||||
@ -1268,10 +1283,12 @@ void EditorFileSystem::_notification(int p_what) {
|
|||||||
first_scan = false;
|
first_scan = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_processing() && scan_changes_pending) {
|
if (done_importing && scan_changes_pending) {
|
||||||
scan_changes_pending = false;
|
scan_changes_pending = false;
|
||||||
scan_changes();
|
scan_changes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prevent_recursive_process_hack = false;
|
||||||
}
|
}
|
||||||
} break;
|
} 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) {
|
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;
|
importing = true;
|
||||||
|
|
||||||
Vector<String> reloads;
|
Vector<String> reloads;
|
||||||
|
Loading…
Reference in New Issue
Block a user