Module: Spider::Fork

Defined in:
lib/spiderfw/utils/fork.rb

Overview

A safe fork keeping track of resources needing to be closed.

Class Method Summary collapse

Class Method Details

.close_resourcesObject

Closes all resources.



13
14
15
16
17
18
19
20
21
22
# File 'lib/spiderfw/utils/fork.rb', line 13

def self.close_resources
    return unless @resources
    @mutex ||= Mutex.new
    @mutex.synchronize do
        @resources.each do |res|
            @resource.close if resource && resource.respond_to?(:close) && !resource.closed?
        end
        @resources.clear
    end
end

.fork(&proc) ⇒ Object

Closes resources, than forks.



25
26
27
28
29
30
31
# File 'lib/spiderfw/utils/fork.rb', line 25

def self.fork(&proc)
    child = Kernel.fork do
        Spider::Fork.close_resources
        yield
    end
    return child
end

.resources_to_close(*list) ⇒ Object

Adds a list of resources. Resources must respond to :close.



7
8
9
10
# File 'lib/spiderfw/utils/fork.rb', line 7

def self.resources_to_close(*list)
    @resources ||= []
    @resources += list
end