From 1d68a735a262dba3d6222cfd664b80db2a33fc60 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Tue, 20 Aug 2024 14:37:28 -0400 Subject: [PATCH] [ruby/tempfile] Don't unlink in finalizer when already unlinked https://github.com/ruby/tempfile/commit/f677941ea2 --- lib/tempfile.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/tempfile.rb b/lib/tempfile.rb index 98706f7156..40221d4f7c 100644 --- a/lib/tempfile.rb +++ b/lib/tempfile.rb @@ -330,6 +330,8 @@ class Tempfile < DelegateClass(File) return end + @finalizer_manager.unlinked = true + @unlinked = true end alias delete unlink @@ -366,10 +368,13 @@ class Tempfile < DelegateClass(File) attr_reader :unlinked, :mode, :opts, :finalizer_manager class FinalizerManager # :nodoc: + attr_accessor :unlinked + def initialize(path) @open_files = {} @path = path @pid = Process.pid + @unlinked = false end def register(obj, file) @@ -381,7 +386,7 @@ class Tempfile < DelegateClass(File) def call(object_id) @open_files.delete(object_id).close - if @open_files.empty? && Process.pid == @pid + if @open_files.empty? && !@unlinked && Process.pid == @pid $stderr.puts "removing #{@path}..." if $DEBUG begin File.unlink(@path)