Skip to content

Commit 337bc4a

Browse files
Merge pull request AUTOMATIC1111#13014 from AUTOMATIC1111/thread-safe-extranetworks-list_items
thread safe extra network list_items
2 parents 6fac65f + 74b80e7 commit 337bc4a

4 files changed

Lines changed: 30 additions & 8 deletions

File tree

extensions-builtin/Lora/ui_extra_networks_lora.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ def refresh(self):
1717

1818
def create_item(self, name, index=None, enable_filter=True):
1919
lora_on_disk = networks.available_networks.get(name)
20+
if lora_on_disk is None:
21+
return
2022

2123
path, ext = os.path.splitext(lora_on_disk.filename)
2224

@@ -66,9 +68,10 @@ def create_item(self, name, index=None, enable_filter=True):
6668
return item
6769

6870
def list_items(self):
69-
for index, name in enumerate(networks.available_networks):
71+
# instantiate a list to protect against concurrent modification
72+
names = list(networks.available_networks)
73+
for index, name in enumerate(names):
7074
item = self.create_item(name, index)
71-
7275
if item is not None:
7376
yield item
7477

modules/ui_extra_networks_checkpoints.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ def refresh(self):
1717

1818
def create_item(self, name, index=None, enable_filter=True):
1919
checkpoint: sd_models.CheckpointInfo = sd_models.checkpoint_aliases.get(name)
20+
if checkpoint is None:
21+
return
22+
2023
path, ext = os.path.splitext(checkpoint.filename)
2124
return {
2225
"name": checkpoint.name_for_extra,
@@ -32,9 +35,12 @@ def create_item(self, name, index=None, enable_filter=True):
3235
}
3336

3437
def list_items(self):
38+
# instantiate a list to protect against concurrent modification
3539
names = list(sd_models.checkpoints_list)
3640
for index, name in enumerate(names):
37-
yield self.create_item(name, index)
41+
item = self.create_item(name, index)
42+
if item is not None:
43+
yield item
3844

3945
def allowed_directories_for_previews(self):
4046
return [v for v in [shared.cmd_opts.ckpt_dir, sd_models.model_path] if v is not None]

modules/ui_extra_networks_hypernets.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ def refresh(self):
1313
shared.reload_hypernetworks()
1414

1515
def create_item(self, name, index=None, enable_filter=True):
16-
full_path = shared.hypernetworks[name]
16+
full_path = shared.hypernetworks.get(name)
17+
if full_path is None:
18+
return
19+
1720
path, ext = os.path.splitext(full_path)
1821
sha256 = sha256_from_cache(full_path, f'hypernet/{name}')
1922
shorthash = sha256[0:10] if sha256 else None
@@ -31,8 +34,12 @@ def create_item(self, name, index=None, enable_filter=True):
3134
}
3235

3336
def list_items(self):
34-
for index, name in enumerate(shared.hypernetworks):
35-
yield self.create_item(name, index)
37+
# instantiate a list to protect against concurrent modification
38+
names = list(shared.hypernetworks)
39+
for index, name in enumerate(names):
40+
item = self.create_item(name, index)
41+
if item is not None:
42+
yield item
3643

3744
def allowed_directories_for_previews(self):
3845
return [shared.cmd_opts.hypernetwork_dir]

modules/ui_extra_networks_textual_inversion.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ def refresh(self):
1414

1515
def create_item(self, name, index=None, enable_filter=True):
1616
embedding = sd_hijack.model_hijack.embedding_db.word_embeddings.get(name)
17+
if embedding is None:
18+
return
1719

1820
path, ext = os.path.splitext(embedding.filename)
1921
return {
@@ -29,8 +31,12 @@ def create_item(self, name, index=None, enable_filter=True):
2931
}
3032

3133
def list_items(self):
32-
for index, name in enumerate(sd_hijack.model_hijack.embedding_db.word_embeddings):
33-
yield self.create_item(name, index)
34+
# instantiate a list to protect against concurrent modification
35+
names = list(sd_hijack.model_hijack.embedding_db.word_embeddings)
36+
for index, name in enumerate(names):
37+
item = self.create_item(name, index)
38+
if item is not None:
39+
yield item
3440

3541
def allowed_directories_for_previews(self):
3642
return list(sd_hijack.model_hijack.embedding_db.embedding_dirs)

0 commit comments

Comments
 (0)