Module: RubyIsForked::ForkCallback::ModuleMethods

Defined in:
lib/ruby_is_forked/fork_callback.rb

Instance Method Summary collapse

Instance Method Details

#fork_with_callback(*args) ⇒ Object

TODO: Might need to do this in a critical section.



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/ruby_is_forked/fork_callback.rb', line 56

def fork_with_callback *args
  CALLBACK_BEFORE_CHILD.each { | proc | proc.call($$) }
  if block_given?
    result = fork_without_callback do
      CALLBACK_IN_CHILD.each { | proc | proc.call($$) }
      yield
    end
    CALLBACK_IN_PARENT.each { | proc | proc.call(result) }
    result
  else
    result = fork_without_callback
    if result 
      # in parent
      CALLBACK_IN_PARENT.each { | proc | proc.call(result) }
    else
      # in child
      CALLBACK_IN_CHILD.each { | proc | proc.call($$) }
    end
    result
  end
end