run-clang-tools: run multiprocessing.Pool as context manager

`multiprocessing.pool.Pool()` should be used as a context manager so
Python can free its internal resources and do a proper cleanup.[1]

While at it move the code to read the `compiler_commands.json` so the
opened file can be closed before the sub-processes are fork()ed.

Link: https://docs.python.org/3/library/multiprocessing.html#multiprocessing.pool.Pool [1]
Signed-off-by: Philipp Hahn <phahn-oss@avm.de>
Link: https://patch.msgid.link/40180613bef84946c45d6fbeb4bb274573cd0beb.1778849135.git.phahn-oss@avm.de
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
This commit is contained in:
Philipp Hahn 2026-05-15 14:47:50 +02:00 committed by Nathan Chancellor
parent c919893eab
commit c10ba5c9c6
No known key found for this signature in database
GPG Key ID: 1D6B269171C01A96

View File

@ -79,14 +79,15 @@ def run_analysis(entry):
def main():
try:
args = parse_arguments()
args = parse_arguments()
lock = multiprocessing.Lock()
pool = multiprocessing.Pool(initializer=init, initargs=(lock, args))
# Read JSON data into the datastore variable
with open(args.path, "r") as f:
datastore = json.load(f)
# Read JSON data into the datastore variable
with open(args.path) as f:
datastore = json.load(f)
lock = multiprocessing.Lock()
try:
with multiprocessing.Pool(initializer=init, initargs=(lock, args)) as pool:
pool.map(run_analysis, datastore)
except BrokenPipeError:
# Python flushes standard streams on exit; redirect remaining output