File tree Expand file tree Collapse file tree 2 files changed +19
-3
lines changed Expand file tree Collapse file tree 2 files changed +19
-3
lines changed Original file line number Diff line number Diff line change @@ -136,10 +136,9 @@ def work(interval = 5.0, &block)
136
136
if not paused? and job = reserve
137
137
log "got: #{ job . inspect } "
138
138
job . worker = self
139
- run_hook :before_fork , job
140
139
working_on job
141
140
142
- if @child = fork
141
+ if @child = fork ( job )
143
142
srand # Reseeding
144
143
procline "Forked #{ @child } at #{ Time . now . to_i } "
145
144
begin
@@ -228,8 +227,12 @@ def queues
228
227
229
228
# Not every platform supports fork. Here we do our magic to
230
229
# determine if yours does.
231
- def fork
230
+ def fork ( job )
232
231
return if @cant_fork
232
+
233
+ # Only run before_fork hooks if we're actually going to fork
234
+ # (after checking @cant_fork)
235
+ run_hook :before_fork , job
233
236
234
237
begin
235
238
# IronRuby doesn't support `Kernel.fork` yet
Original file line number Diff line number Diff line change @@ -376,6 +376,19 @@ def self.perform
376
376
workerA . work ( 0 )
377
377
assert $BEFORE_FORK_CALLED
378
378
end
379
+
380
+ test "Will not call a before_fork hook when the worker can't fork" do
381
+ Resque . redis . flushall
382
+ $BEFORE_FORK_CALLED = false
383
+ Resque . before_fork = Proc . new { $BEFORE_FORK_CALLED = true }
384
+ workerA = Resque ::Worker . new ( :jobs )
385
+ workerA . cant_fork = true
386
+
387
+ assert !$BEFORE_FORK_CALLED, "before_fork should not have been called before job runs"
388
+ Resque ::Job . create ( :jobs , SomeJob , 20 , '/tmp' )
389
+ workerA . work ( 0 )
390
+ assert !$BEFORE_FORK_CALLED, "before_fork should not have been called after job runs"
391
+ end
379
392
380
393
test "very verbose works in the afternoon" do
381
394
begin
You can’t perform that action at this time.
0 commit comments