From 7d3f3688283f4d304e3f5f9e73e911f696dcb565 Mon Sep 17 00:00:00 2001 From: tension <1113989231@qq.com> Date: Fri, 1 Aug 2025 14:15:40 +0800 Subject: [PATCH] Fix multi process resource competition Issue: ICOJCG Signed-off-by: zhangli <1113989231@qq.com> Change-id: af8cc9f75a872c05d7e81e849b3d8a32cza4e96cd --- .../driver/build_system/build_build_system.py | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/ets2panda/driver/build_system/build_build_system.py b/ets2panda/driver/build_system/build_build_system.py index 70ac97d99d..4b2e3921f4 100755 --- a/ets2panda/driver/build_system/build_build_system.py +++ b/ets2panda/driver/build_system/build_build_system.py @@ -19,6 +19,18 @@ import shutil import subprocess import sys import tarfile +import fcntl + + +def ensure_lock_dir_exists(lock_path): + lock_dir = os.path.dirname(lock_path) + if lock_dir and not os.path.exists(lock_dir): + try: + os.makedirs(lock_dir, exist_ok=True) + return True + except OSError as e: + return False + return True def copy_files(source_path, dest_path, is_file=False): @@ -71,9 +83,22 @@ def parse_args(): def main(): options = parse_args() + lock_path = options.source_path + '.lock' + if not ensure_lock_dir_exists(lock_path): + raise Exception(f"Create lock dir failed: {lock_path}") - build(options) - copy_output(options) + try: + lock_file = open(lock_path, 'w') + fcntl.flock(lock_file.fileno(), fcntl.LOCK_EX) + build(options) + copy_output(options) + except Exception as err: + raise Exception("main run failed. Error: " + str(err)) from err + finally: + if lock_file: + fcntl.flock(lock_file.fileno(), fcntl.LOCK_UN) + lock_file.close() + if __name__ == '__main__': -- Gitee