From f987e108679e20982f0c3d55b99294aee34b1b51 Mon Sep 17 00:00:00 2001 From: haosenwang1018 Date: Tue, 24 Feb 2026 21:50:51 +0000 Subject: [PATCH] fix: add context manager and finalizer to JsonlLogger JsonlLogger opens a file handle in __init__ but has no __del__ or context manager protocol, so the handle leaks if close() is not explicitly called (e.g., on exception). Add __enter__/__exit__ for use as context manager and __del__ as safety net for garbage collection. --- policy_models/training/trainers.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/policy_models/training/trainers.py b/policy_models/training/trainers.py index 3d27794..73bae1f 100644 --- a/policy_models/training/trainers.py +++ b/policy_models/training/trainers.py @@ -294,6 +294,20 @@ def log(self, obj: Dict[str, Any]): def close(self): self.f.close() + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.close() + return False + + def __del__(self): + try: + if not self.f.closed: + self.f.close() + except Exception: + pass + class Checkpointer: def __init__(self, out_dir: str, pv_dir: str):