Actions
Feature #19561
closedObjectSpace::WeakMap#delete and ObjectSpace::WeakKeyMap#delete
Status:
Closed
Assignee:
-
Target version:
-
Description
I just realized in https://bugs.ruby-lang.org/issues/19560#Ruby-shim that there's no way to remove elements from either WeakMaps.
I think they could both benefit from a delete
method.
Use case¶
For example, to keep track of a subset of instances of a class, you may need to remove some from the list when a condition changes:
class Connection
CLOSE_ON_FORK = ObjectSpace::WeakMap.new
class << self
def after_fork
CLOSE_ON_FORK.each_key do |connection|
connection.close if connection.close_on_fork?
end
end
end
def close_on_fork=(enabled)
if enabled
CLOSE_ON_FORK[self] = true
else
CLOSE_ON_FORK.delete(self)
end
@close_on_fork = enabled
end
def close_on_fork?
@close_on_fork
end
end
module CloseOnFork
IOS = ObjectSpace::WeakMap.new
def _fork
pid = super
if pid == 0 # child
::Connection.after_fork
end
pid
end
end
Process.singleton_class.prepend(CloseIOOnFork)
Actions
Like1
Like0Like0