fix multithreaded import racing condition when frozen
This commit is contained in:
parent
d190fe65c6
commit
f27d9e904f
2
Main.py
2
Main.py
|
@ -20,6 +20,7 @@ from Fill import distribute_items_cutoff, distribute_items_staleness, distribute
|
||||||
balance_multiworld_progression
|
balance_multiworld_progression
|
||||||
from ItemList import generate_itempool, difficulties, fill_prizes
|
from ItemList import generate_itempool, difficulties, fill_prizes
|
||||||
from Utils import output_path, parse_player_names, get_options, __version__
|
from Utils import output_path, parse_player_names, get_options, __version__
|
||||||
|
import Patch
|
||||||
|
|
||||||
seeddigits = 20
|
seeddigits = 20
|
||||||
|
|
||||||
|
@ -226,7 +227,6 @@ def main(args, seed=None):
|
||||||
rompath = output_path(f'{outfilebase}{outfilepname}{outfilesuffix}.sfc')
|
rompath = output_path(f'{outfilebase}{outfilepname}{outfilesuffix}.sfc')
|
||||||
rom.write_to_file(rompath)
|
rom.write_to_file(rompath)
|
||||||
if args.create_diff:
|
if args.create_diff:
|
||||||
import Patch
|
|
||||||
Patch.create_patch_file(rompath)
|
Patch.create_patch_file(rompath)
|
||||||
return (player, team, list(rom.name))
|
return (player, team, list(rom.name))
|
||||||
|
|
||||||
|
|
4
Patch.py
4
Patch.py
|
@ -10,7 +10,7 @@ import sys
|
||||||
from typing import Tuple, Optional
|
from typing import Tuple, Optional
|
||||||
|
|
||||||
import Utils
|
import Utils
|
||||||
from Rom import JAP10HASH, read_rom
|
from Rom import JAP10HASH
|
||||||
|
|
||||||
|
|
||||||
def get_base_rom_path(file_name: str = "") -> str:
|
def get_base_rom_path(file_name: str = "") -> str:
|
||||||
|
@ -23,6 +23,7 @@ def get_base_rom_path(file_name: str = "") -> str:
|
||||||
|
|
||||||
|
|
||||||
def get_base_rom_bytes(file_name: str = "") -> bytes:
|
def get_base_rom_bytes(file_name: str = "") -> bytes:
|
||||||
|
from Rom import read_rom
|
||||||
base_rom_bytes = getattr(get_base_rom_bytes, "base_rom_bytes", None)
|
base_rom_bytes = getattr(get_base_rom_bytes, "base_rom_bytes", None)
|
||||||
if not base_rom_bytes:
|
if not base_rom_bytes:
|
||||||
file_name = get_base_rom_path(file_name)
|
file_name = get_base_rom_path(file_name)
|
||||||
|
@ -160,3 +161,4 @@ if __name__ == "__main__":
|
||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
input("Press enter to close.")
|
input("Press enter to close.")
|
||||||
|
|
||||||
|
|
16
Rom.py
16
Rom.py
|
@ -1,4 +1,6 @@
|
||||||
import bisect
|
JAP10HASH = '03a63945398191337e896e5771f77173'
|
||||||
|
RANDOMIZERBASEHASH = 'a567da86e8bd499256da4bba2209a3fd'
|
||||||
|
|
||||||
import io
|
import io
|
||||||
import json
|
import json
|
||||||
import hashlib
|
import hashlib
|
||||||
|
@ -19,10 +21,9 @@ from Text import KingsReturn_texts, Sanctuary_texts, Kakariko_texts, Blacksmiths
|
||||||
from Utils import output_path, local_path, int16_as_bytes, int32_as_bytes, snes_to_pc
|
from Utils import output_path, local_path, int16_as_bytes, int32_as_bytes, snes_to_pc
|
||||||
from Items import ItemFactory
|
from Items import ItemFactory
|
||||||
from EntranceShuffle import door_addresses
|
from EntranceShuffle import door_addresses
|
||||||
|
import Patch
|
||||||
|
|
||||||
|
|
||||||
JAP10HASH = '03a63945398191337e896e5771f77173'
|
|
||||||
RANDOMIZERBASEHASH = 'a567da86e8bd499256da4bba2209a3fd'
|
|
||||||
|
|
||||||
class LocalRom(object):
|
class LocalRom(object):
|
||||||
|
|
||||||
|
@ -65,7 +66,7 @@ class LocalRom(object):
|
||||||
return expected == buffermd5.hexdigest()
|
return expected == buffermd5.hexdigest()
|
||||||
|
|
||||||
def patch_base_rom(self):
|
def patch_base_rom(self):
|
||||||
from Patch import create_patch_file, create_rom_bytes
|
|
||||||
|
|
||||||
if os.path.isfile(local_path('basepatch.sfc')):
|
if os.path.isfile(local_path('basepatch.sfc')):
|
||||||
with open(local_path('basepatch.sfc'), 'rb') as stream:
|
with open(local_path('basepatch.sfc'), 'rb') as stream:
|
||||||
|
@ -74,11 +75,11 @@ class LocalRom(object):
|
||||||
if self.verify(buffer):
|
if self.verify(buffer):
|
||||||
self.buffer = buffer
|
self.buffer = buffer
|
||||||
if not os.path.exists(local_path(os.path.join('data', 'basepatch.bmbp'))):
|
if not os.path.exists(local_path(os.path.join('data', 'basepatch.bmbp'))):
|
||||||
create_patch_file(local_path('basepatch.sfc'))
|
Patch.create_patch_file(local_path('basepatch.sfc'))
|
||||||
return
|
return
|
||||||
|
|
||||||
if os.path.isfile(local_path(os.path.join('data', 'basepatch.bmbp'))):
|
if os.path.isfile(local_path(os.path.join('data', 'basepatch.bmbp'))):
|
||||||
_, target, buffer = create_rom_bytes(local_path(os.path.join('data', 'basepatch.bmbp')))
|
_, target, buffer = Patch.create_rom_bytes(local_path(os.path.join('data', 'basepatch.bmbp')))
|
||||||
if self.verify(buffer):
|
if self.verify(buffer):
|
||||||
self.buffer = bytearray(buffer)
|
self.buffer = bytearray(buffer)
|
||||||
with open(local_path('basepatch.sfc'), 'wb') as stream:
|
with open(local_path('basepatch.sfc'), 'wb') as stream:
|
||||||
|
@ -105,7 +106,8 @@ class LocalRom(object):
|
||||||
if self.verify(self.buffer):
|
if self.verify(self.buffer):
|
||||||
with open(local_path('basepatch.sfc'), 'wb') as stream:
|
with open(local_path('basepatch.sfc'), 'wb') as stream:
|
||||||
stream.write(self.buffer)
|
stream.write(self.buffer)
|
||||||
create_patch_file(local_path('basepatch.sfc'), destination=local_path(os.path.join('data', 'basepatch.bmbp')))
|
Patch.create_patch_file(local_path('basepatch.sfc'),
|
||||||
|
destination=local_path(os.path.join('data', 'basepatch.bmbp')))
|
||||||
os.remove(local_path('data/base2current.json'))
|
os.remove(local_path('data/base2current.json'))
|
||||||
else:
|
else:
|
||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
|
|
Loading…
Reference in New Issue