663: def reap_dead_workers(reason='unknown')
664: if @workers.list.length > 0
665: STDERR.puts "#{Time.now}: Reaping #{@workers.list.length} threads for slow workers because of '#{reason}'"
666: error_msg = "Mongrel timed out this thread: #{reason}"
667: mark = Time.now
668: @workers.list.each do |w|
669: w[:started_on] = Time.now if not w[:started_on]
670:
671: if mark - w[:started_on] > @death_time + @timeout
672: STDERR.puts "Thread #{w.inspect} is too old, killing."
673: w.raise(TimeoutError.new(error_msg))
674: end
675: end
676: end
677:
678: return @workers.list.length
679: end