@@ -128,7 +128,9 @@ def work(interval = 5.0, &block)
128
128
loop do
129
129
break if shutdown?
130
130
131
- if not paused? and job = reserve ( interval )
131
+ pause if should_pause?
132
+
133
+ if job = reserve ( interval )
132
134
log "got: #{ job . inspect } "
133
135
job . worker = self
134
136
run_hook :before_fork , job
@@ -273,7 +275,6 @@ def register_signal_handlers
273
275
trap ( 'QUIT' ) { shutdown }
274
276
trap ( 'USR1' ) { kill_child }
275
277
trap ( 'USR2' ) { pause_processing }
276
- trap ( 'CONT' ) { unpause_processing }
277
278
rescue ArgumentError
278
279
warn "Signals QUIT, USR1, USR2, and/or CONT not supported."
279
280
end
@@ -314,9 +315,22 @@ def kill_child
314
315
end
315
316
316
317
# are we paused?
317
- def paused ?
318
+ def should_pause ?
318
319
@paused
319
320
end
321
+ alias :paused? :should_pause?
322
+
323
+ def pause
324
+ rd , wr = IO . pipe
325
+ trap ( 'CONT' ) {
326
+ log "CONT received; resuming job processing"
327
+ @paused = false
328
+ wr . write 'x'
329
+ wr . close
330
+ }
331
+ rd . read 1
332
+ rd . close
333
+ end
320
334
321
335
# Stop processing jobs after the current one has completed (if we're
322
336
# currently running one).
@@ -325,12 +339,6 @@ def pause_processing
325
339
@paused = true
326
340
end
327
341
328
- # Start processing jobs again after a pause
329
- def unpause_processing
330
- log "CONT received; resuming job processing"
331
- @paused = false
332
- end
333
-
334
342
# Looks for any workers which should be running on this server
335
343
# and, if they're not, removes them from Redis.
336
344
#
0 commit comments