# File lib/brakeman/checks.rb, line 118
  def self.actually_run_checks(checks, check_runner, app_tree, tracker)
    threads = [] # Results for parallel
    results = [] # Results for sequential
    parallel = tracker.options[:parallel_checks]
    error_mutex = Mutex.new

    checks.each do |c|
      check_name = get_check_name c
      Brakeman.notify " - #{check_name}"

      if parallel
        threads << Thread.new do
          self.run_a_check(c, error_mutex, app_tree, tracker)
        end
      else
        results << self.run_a_check(c, error_mutex, app_tree, tracker)
      end

      #Maintain list of which checks were run
      #mainly for reporting purposes
      check_runner.checks_run << check_name[5..-1]
    end

    threads.each { |t| t.join }

    Brakeman.notify "Checks finished, collecting results..."

    if parallel
      threads.each do |thread|
        thread.value.each do |warning|
          check_runner.add_warning warning
        end
      end
    else
      results.each do |warnings|
        warnings.each do |warning|
          check_runner.add_warning warning
        end
      end
    end

    check_runner
  end