From 0d4eddea0b5b691a6c112974ca9f2a2ba0f827c9 Mon Sep 17 00:00:00 2001 From: tomaioo Date: Sat, 23 May 2026 17:11:28 -0700 Subject: [PATCH] refactor(festim): resource leak: xdmffile not closed in `meshfromxdm In `MeshFromXDMF.__init__`, an `XDMFFile` is opened to read the mesh but never explicitly closed. While Python's garbage collection may eventually close it, this is unreliable and can lead to file descriptor leaks, especially in MPI contexts. Signed-off-by: tomaioo <203048277+tomaioo@users.noreply.github.com> --- src/festim/mesh/mesh_from_xdmf.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/festim/mesh/mesh_from_xdmf.py b/src/festim/mesh/mesh_from_xdmf.py index a318f06bc..29a81307b 100644 --- a/src/festim/mesh/mesh_from_xdmf.py +++ b/src/festim/mesh/mesh_from_xdmf.py @@ -42,8 +42,8 @@ def __init__( self.surface_meshtags_name = surface_meshtags_name self.volume_meshtags_name = volume_meshtags_name - volumes_file = XDMFFile(MPI.COMM_WORLD, self.volume_file, "r") - mesh = volumes_file.read_mesh(name=f"{self.mesh_name}") + with XDMFFile(MPI.COMM_WORLD, self.volume_file, "r") as volumes_file: + mesh = volumes_file.read_mesh(name=f"{self.mesh_name}") super().__init__(mesh=mesh) @@ -53,10 +53,10 @@ def define_surface_meshtags(self): Returns: dolfinx.MeshTags: the facet meshtags """ - facets_file = XDMFFile(MPI.COMM_WORLD, self.facet_file, "r") - facet_meshtags = facets_file.read_meshtags( - self.mesh, name=f"{self.surface_meshtags_name}" - ) + with XDMFFile(MPI.COMM_WORLD, self.facet_file, "r") as facets_file: + facet_meshtags = facets_file.read_meshtags( + self.mesh, name=f"{self.surface_meshtags_name}" + ) return facet_meshtags @@ -66,10 +66,9 @@ def define_volume_meshtags(self): Returns: dolfinx.MeshTags: the volume meshtags """ - volume_file = XDMFFile(MPI.COMM_WORLD, self.volume_file, "r") - - volume_meshtags = volume_file.read_meshtags( - self.mesh, name=f"{self.volume_meshtags_name}" - ) + with XDMFFile(MPI.COMM_WORLD, self.volume_file, "r") as volume_file: + volume_meshtags = volume_file.read_meshtags( + self.mesh, name=f"{self.volume_meshtags_name}" + ) return volume_meshtags