From 7f76863e5413268f64ad6f72c66486ec28047ba7 Mon Sep 17 00:00:00 2001 From: Aaron Meese Date: Wed, 1 Apr 2026 12:22:18 -0400 Subject: [PATCH] fix: retain Tempfile reference to prevent GC race The Tempfile object was immediately discarded after calling .path, making it eligible for garbage collection. When GC finalized the object, the underlying ISO file was deleted before File.size could read it, causing flaky ENOENT failures in CI. --- lib/fog/libvirt/models/compute/server.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/fog/libvirt/models/compute/server.rb b/lib/fog/libvirt/models/compute/server.rb index 2059669..65c51c6 100644 --- a/lib/fog/libvirt/models/compute/server.rb +++ b/lib/fog/libvirt/models/compute/server.rb @@ -259,11 +259,14 @@ def generate_config_iso_in_dir(dir_path, user_data, &blk) user_data_path = File.join(dir_path, 'user-data') File.write(user_data_path, user_data) - isofile = Tempfile.new(['init', '.iso']).path + iso_tempfile = Tempfile.new(['init', '.iso']) + isofile = iso_tempfile.path unless system('xorrisofs', '-output', isofile, '-volid', 'cidata', '-joliet', '-rock', user_data_path, meta_data_path) raise Fog::Errors::Error.new("Couldn't generate cloud-init iso disk with xorrisofs.") end blk.call(isofile) + ensure + iso_tempfile&.close! end def create_user_data_iso