|
@@ -128,6 +128,10 @@ void GDScriptCache::move_script(const String &p_from, const String &p_to) {
|
|
|
|
|
|
MutexLock lock(singleton->mutex);
|
|
MutexLock lock(singleton->mutex);
|
|
|
|
|
|
|
|
+ if (singleton->cleared) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
for (KeyValue<String, HashSet<String>> &E : singleton->packed_scene_dependencies) {
|
|
for (KeyValue<String, HashSet<String>> &E : singleton->packed_scene_dependencies) {
|
|
if (E.value.has(p_from)) {
|
|
if (E.value.has(p_from)) {
|
|
E.value.insert(p_to);
|
|
E.value.insert(p_to);
|
|
@@ -158,6 +162,10 @@ void GDScriptCache::remove_script(const String &p_path) {
|
|
|
|
|
|
MutexLock lock(singleton->mutex);
|
|
MutexLock lock(singleton->mutex);
|
|
|
|
|
|
|
|
+ if (singleton->cleared) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
for (KeyValue<String, HashSet<String>> &E : singleton->packed_scene_dependencies) {
|
|
for (KeyValue<String, HashSet<String>> &E : singleton->packed_scene_dependencies) {
|
|
if (!E.value.has(p_path)) {
|
|
if (!E.value.has(p_path)) {
|
|
continue;
|
|
continue;
|
|
@@ -371,6 +379,10 @@ void GDScriptCache::clear_unreferenced_packed_scenes() {
|
|
|
|
|
|
MutexLock lock(singleton->mutex);
|
|
MutexLock lock(singleton->mutex);
|
|
|
|
|
|
|
|
+ if (singleton->cleared) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
for (KeyValue<String, HashSet<String>> &E : singleton->packed_scene_dependencies) {
|
|
for (KeyValue<String, HashSet<String>> &E : singleton->packed_scene_dependencies) {
|
|
if (E.value.size() > 0 || !ResourceLoader::is_imported(E.key)) {
|
|
if (E.value.size() > 0 || !ResourceLoader::is_imported(E.key)) {
|
|
continue;
|
|
continue;
|
|
@@ -388,6 +400,11 @@ void GDScriptCache::clear() {
|
|
|
|
|
|
MutexLock lock(singleton->mutex);
|
|
MutexLock lock(singleton->mutex);
|
|
|
|
|
|
|
|
+ if (singleton->cleared) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ singleton->cleared = true;
|
|
|
|
+
|
|
RBSet<Ref<GDScriptParserRef>> parser_map_refs;
|
|
RBSet<Ref<GDScriptParserRef>> parser_map_refs;
|
|
for (KeyValue<String, GDScriptParserRef *> &E : singleton->parser_map) {
|
|
for (KeyValue<String, GDScriptParserRef *> &E : singleton->parser_map) {
|
|
parser_map_refs.insert(E.value);
|
|
parser_map_refs.insert(E.value);
|
|
@@ -417,7 +434,8 @@ GDScriptCache::GDScriptCache() {
|
|
}
|
|
}
|
|
|
|
|
|
GDScriptCache::~GDScriptCache() {
|
|
GDScriptCache::~GDScriptCache() {
|
|
- destructing = true;
|
|
|
|
- clear();
|
|
|
|
|
|
+ if (!cleared) {
|
|
|
|
+ clear();
|
|
|
|
+ }
|
|
singleton = nullptr;
|
|
singleton = nullptr;
|
|
}
|
|
}
|