class PhusionPassenger::Rack::OutOfBandGc

def call(env)

def call(env)
  status, headers, body = @app.call(env)
  @mutex.synchronize do
    @request_count += 1
    if @request_count == @frequency
      @request_count = 0
      headers['X-Passenger-Request-OOB-Work'] = 'true'
    end
  end
  
  [status, headers, body]
end

def initialize(app, frequency, logger = nil)

def initialize(app, frequency, logger = nil)
  @app = app
  @frequency = frequency
  @request_count = 0
  @mutex = Mutex.new
  
  ::PhusionPassenger.on_event(:oob_work) do
    t0 = Time.now
    disabled = GC.enable
    GC.start
    GC.disable if disabled
    logger.info "Out Of Band GC finished in #{Time.now - t0} sec" if logger
  end
end