diff --git a/src/revpi_middleware/dbus_middleware1/system_config/revpi_config.py b/src/revpi_middleware/dbus_middleware1/system_config/revpi_config.py index 3e2fb29..b61ae20 100644 --- a/src/revpi_middleware/dbus_middleware1/system_config/revpi_config.py +++ b/src/revpi_middleware/dbus_middleware1/system_config/revpi_config.py @@ -10,6 +10,7 @@ from glob import glob from logging import getLogger from os import X_OK, access from os.path import exists, join +from threading import Lock from typing import List, Optional from pydbus import SystemBus @@ -24,6 +25,7 @@ ConfigVariable = namedtuple("ConfigVariable", ["name", "value", "line_index"]) LINUX_BT_CLASS_PATH = "/sys/class/bluetooth" LINUX_WLAN_CLASS_PATH = "/sys/class/ieee80211" CONFIG_TXT_LOCATIONS = ("/boot/firmware/config.txt", "/boot/config.txt") +CONFIG_TXT_LOCK = Lock() class ComputeModuleTypes(IntEnum): @@ -228,11 +230,6 @@ class ConfigTxt: to manipulate specific parameters within the configuration and supports managing dtoverlay and dtparam entries. The primary aim of this class is to abstract file operations and make modifications user-friendly. - - Attributes: - _config_txt_path (str): The path to the configuration file `config.txt`. - _config_txt_lines (list[str]): Contains all lines of the configuration - file as a list of strings, where each string represents a line. """ re_name_value = re.compile(r"^\s*(?!#)(?P[^=\s].+?)\s*=\s*(?P\S+)\s*$") @@ -318,8 +315,9 @@ class ConfigTxt: Returns: None """ - with open(self._config_txt_path, "r") as f: - self._config_txt_lines = f.readlines() + with CONFIG_TXT_LOCK: + with open(self._config_txt_path, "r") as f: + self._config_txt_lines = f.readlines() def save_config(self): """ @@ -333,10 +331,11 @@ class ConfigTxt: if not self._config_txt_lines: return - tmp_path = f"{self._config_txt_path}.tmp" - with open(tmp_path, "w") as f: - f.writelines(self._config_txt_lines) - shutil.move(tmp_path, self._config_txt_path) + with CONFIG_TXT_LOCK: + tmp_path = f"{self._config_txt_path}.tmp" + with open(tmp_path, "w") as f: + f.writelines(self._config_txt_lines) + shutil.move(tmp_path, self._config_txt_path) self._config_txt_lines.clear()