# File lib/new_relic/agent/pipe_channel_manager.rb, line 162
        def start
          return if @started == true
          @started = true
          @thread = NewRelic::Agent::Threading::AgentThread.create('Pipe Channel Manager') do
            now = nil
            loop do
              clean_up_pipes

              pipes_to_listen_to = @pipes_lock.synchronize do
                @pipes.values.map{|pipe| pipe.out} + [wake.out]
              end

              NewRelic::Agent.record_metric('Supportability/Listeners',
                (Time.now - now).to_f) if now

              if ready = IO.select(pipes_to_listen_to, [], [], @select_timeout)
                now = Time.now

                ready_pipes = ready[0]
                ready_pipes.each do |pipe|
                  merge_data_from_pipe(pipe) unless pipe == wake.out
                end

                wake.out.read(1) if ready_pipes.include?(wake.out)
              end

              break unless should_keep_listening?
            end
          end
          sleep 0.001 # give time for the thread to spawn
        end