On Mon, 2026-01-19 at 17:45 -0300, Wander Lairson Costa wrote: > Replace manual file open and close operations with context managers > throughout the rvgen codebase. The previous implementation used > explicit open() and close() calls, which could lead to resource leaks > if exceptions occurred between opening and closing the file handles. > > This change affects three file operations: reading DOT specification > files in the automata parser, reading template files in the generator > base class, and writing generated monitor files. All now use the with > statement to ensure proper resource cleanup even in error conditions. > > Context managers provide automatic cleanup through the with statement, > which guarantees that file handles are closed when the with block > exits regardless of whether an exception occurred. This follows PEP > 343 recommendations and is the standard Python idiom for resource > management. The change also reduces code verbosity while improving > safety and maintainability. > > Signed-off-by: Wander Lairson Costa <[email protected]>
Looks reasonable, thanks! Reviewed-by: Gabriele Monaco <[email protected]> > --- > tools/verification/rvgen/rvgen/automata.py | 6 ++---- > tools/verification/rvgen/rvgen/generator.py | 12 ++++-------- > 2 files changed, 6 insertions(+), 12 deletions(-) > > diff --git a/tools/verification/rvgen/rvgen/automata.py > b/tools/verification/rvgen/rvgen/automata.py > index ed02d0c69b410..70ff98abea751 100644 > --- a/tools/verification/rvgen/rvgen/automata.py > +++ b/tools/verification/rvgen/rvgen/automata.py > @@ -51,13 +51,11 @@ class Automata: > cursor = 0 > dot_lines = [] > try: > - dot_file = open(self.__dot_path) > + with open(self.__dot_path) as dot_file: > + dot_lines = dot_file.read().splitlines() > except OSError as exc: > raise AutomataError(f"Cannot open the file: {self.__dot_path}") > from exc > > - dot_lines = dot_file.read().splitlines() > - dot_file.close() > - > # checking the first line: > line = dot_lines[cursor].split() > > diff --git a/tools/verification/rvgen/rvgen/generator.py > b/tools/verification/rvgen/rvgen/generator.py > index 6d16fb68798a7..ee75e111feef1 100644 > --- a/tools/verification/rvgen/rvgen/generator.py > +++ b/tools/verification/rvgen/rvgen/generator.py > @@ -51,11 +51,8 @@ class RVGenerator: > raise FileNotFoundError("Could not find the rv directory, do you have > the kernel source installed?") > > def _read_file(self, path): > - fd = open(path, 'r') > - > - content = fd.read() > - > - fd.close() > + with open(path, 'r') as fd: > + content = fd.read() > return content > > def _read_template_file(self, file): > @@ -199,9 +196,8 @@ obj-$(CONFIG_RV_MON_{name_up}) += monitors/{name}/{name}.o > return > > def __write_file(self, file_name, content): > - file = open(file_name, 'w') > - file.write(content) > - file.close() > + with open(file_name, 'w') as file: > + file.write(content) > > def _create_file(self, file_name, content): > path = f"{self.name}/{file_name}"
