diff --git a/WebHostLib/customserver.py b/WebHostLib/customserver.py index 156c1252..45aca124 100644 --- a/WebHostLib/customserver.py +++ b/WebHostLib/customserver.py @@ -97,6 +97,7 @@ class WebHostContext(Context): self.main_loop.call_soon_threadsafe(cmdprocessor, command.commandtext) command.delete() commit() + del commands time.sleep(5) @db_session @@ -146,13 +147,13 @@ class WebHostContext(Context): self.location_name_groups = static_location_name_groups return self._load(multidata, game_data_packages, True) - @db_session def init_save(self, enabled: bool = True): self.saving = enabled if self.saving: - savegame_data = Room.get(id=self.room_id).multisave - if savegame_data: - self.set_save(restricted_loads(Room.get(id=self.room_id).multisave)) + with db_session: + savegame_data = Room.get(id=self.room_id).multisave + if savegame_data: + self.set_save(restricted_loads(Room.get(id=self.room_id).multisave)) self._start_async_saving(atexit_save=False) threading.Thread(target=self.listen_to_db_commands, daemon=True).start() @@ -304,6 +305,7 @@ def run_server_process(name: str, ponyconfig: dict, static_server_data: dict, with db_session: room = Room.get(id=ctx.room_id) room.last_port = port + del room else: ctx.logger.exception("Could not determine port. Likely hosting failure.") with db_session: @@ -322,6 +324,7 @@ def run_server_process(name: str, ponyconfig: dict, static_server_data: dict, with db_session: room = Room.get(id=room_id) room.last_port = -1 + del room logger.exception(e) raise else: @@ -333,11 +336,12 @@ def run_server_process(name: str, ponyconfig: dict, static_server_data: dict, ctx.save_dirty = False # make sure the saving thread does not write to DB after final wakeup ctx.exit_event.set() # make sure the saving thread stops at some point # NOTE: async saving should probably be an async task and could be merged with shutdown_task - with (db_session): + with db_session: # ensure the Room does not spin up again on its own, minute of safety buffer room = Room.get(id=room_id) room.last_activity = datetime.datetime.utcnow() - \ datetime.timedelta(minutes=1, seconds=room.timeout) + del room logging.info(f"Shutting down room {room_id} on {name}.") finally: await asyncio.sleep(5)