Merge pull request #85295 from jsjtxietian/use-mutex-protect-max_index-in-ImportThreadData
Use `SafeNumeric` to protect `max_index` in ImportThreadData
This commit is contained in:
commit
a21824b293
|
@ -2328,8 +2328,9 @@ void EditorFileSystem::reimport_file_with_custom_parameters(const String &p_file
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorFileSystem::_reimport_thread(uint32_t p_index, ImportThreadData *p_import_data) {
|
void EditorFileSystem::_reimport_thread(uint32_t p_index, ImportThreadData *p_import_data) {
|
||||||
p_import_data->max_index = MAX(p_import_data->reimport_from + int(p_index), p_import_data->max_index);
|
int current_max = p_import_data->reimport_from + int(p_index);
|
||||||
_reimport_file(p_import_data->reimport_files[p_import_data->reimport_from + p_index].path);
|
p_import_data->max_index.exchange_if_greater(current_max);
|
||||||
|
_reimport_file(p_import_data->reimport_files[current_max].path);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorFileSystem::reimport_files(const Vector<String> &p_files) {
|
void EditorFileSystem::reimport_files(const Vector<String> &p_files) {
|
||||||
|
@ -2409,15 +2410,15 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) {
|
||||||
importer->import_threaded_begin();
|
importer->import_threaded_begin();
|
||||||
|
|
||||||
ImportThreadData tdata;
|
ImportThreadData tdata;
|
||||||
tdata.max_index = from;
|
tdata.max_index.set(from);
|
||||||
tdata.reimport_from = from;
|
tdata.reimport_from = from;
|
||||||
tdata.reimport_files = reimport_files.ptr();
|
tdata.reimport_files = reimport_files.ptr();
|
||||||
|
|
||||||
WorkerThreadPool::GroupID group_task = WorkerThreadPool::get_singleton()->add_template_group_task(this, &EditorFileSystem::_reimport_thread, &tdata, i - from + 1, -1, false, vformat(TTR("Import resources of type: %s"), reimport_files[from].importer));
|
WorkerThreadPool::GroupID group_task = WorkerThreadPool::get_singleton()->add_template_group_task(this, &EditorFileSystem::_reimport_thread, &tdata, i - from + 1, -1, false, vformat(TTR("Import resources of type: %s"), reimport_files[from].importer));
|
||||||
int current_index = from - 1;
|
int current_index = from - 1;
|
||||||
do {
|
do {
|
||||||
if (current_index < tdata.max_index) {
|
if (current_index < tdata.max_index.get()) {
|
||||||
current_index = tdata.max_index;
|
current_index = tdata.max_index.get();
|
||||||
pr.step(reimport_files[current_index].path.get_file(), current_index);
|
pr.step(reimport_files[current_index].path.get_file(), current_index);
|
||||||
}
|
}
|
||||||
OS::get_singleton()->delay_usec(1);
|
OS::get_singleton()->delay_usec(1);
|
||||||
|
|
|
@ -282,7 +282,7 @@ class EditorFileSystem : public Node {
|
||||||
struct ImportThreadData {
|
struct ImportThreadData {
|
||||||
const ImportFile *reimport_files;
|
const ImportFile *reimport_files;
|
||||||
int reimport_from;
|
int reimport_from;
|
||||||
int max_index = 0;
|
SafeNumeric<int> max_index;
|
||||||
};
|
};
|
||||||
|
|
||||||
void _reimport_thread(uint32_t p_index, ImportThreadData *p_import_data);
|
void _reimport_thread(uint32_t p_index, ImportThreadData *p_import_data);
|
||||||
|
|
Loading…
Reference in New Issue