start_feed_thread (Raggle::Engine)

    # File raggle, line 5447
        def Engine::start_feed_thread
          meth = 'Engine.start_feed_thread'

          ret = Thread.new do
            Engine::start_grab_log

            first_iteration = true
            loop do
              if !first_iteration || $config['update_on_startup']
                begin
                  threads = []
                  $config['feeds'].each do |the_feed|
                    threads << Thread::new(the_feed) do |feed|
                      Raggle::Engine::grab_feed(feed)
                    end

                    until Thread::list.size < ($config['max_threads'] || 60)
                      $log.debug(meth) { _('DEBUG: Waiting for threads') }
                      sleep 5
                    end
                  end

                  # wait for outstanding feed grabbing threads to finish
                  threads.each do |th|
                    begin
                      if th && th.status && th.alive?
                        th_title = th['feed'] ? th['feed']['title'] : th
                        th_msg = _('Waiting on "%s"')
                        $log.debug(meth) { th_msg % [th_title] }
                        th.join($config['thread_reap_timeout'] || 2)
                      end
                    rescue Exception
                      # log error message
                      err_msg = _('Feed Thread Reap Error:')
                      $log.error(meth) { "#{err_msg} #$!" }

                      # if debugging is enabled, then log a backtrace too
                      $log.debug(meth) {
                        bt = ($!.backtrace || []).join rescue ''
                        "#{err_msg} #$!: (backtrace): #{bt}"
                      }
                      next
                    end
                  end
                rescue
                  # log error message
                  err_msg = _('Feed Error: ')
                  $log.error(meth) { "#{err_msg} #$!" }

                  # if debugging is enabled, then log a backtrace too
                  $log.debug(meth) {
                    bt = $!.backtrace.join rescue ''
                    "#{err_msg} #{$!} backtrace:  #{bt}"
                  }
                end
              end

              first_iteration = false

              # finish log entries
              interval = $config['feed_sleep_interval']
              $new_status = $config['msg_grab_done'] % [ $VERSION ]
              if $config['use_manual_update']
                $log.info(meth) { _('Done checking.') }
                Thread::stop
              else
                Thread::list.each do |th|
                  if th && th.status && th.alive? && th['feed']
                    $log.debug(meth) { "threads: #{th['feed']['title']}" }
                  end
                end
                done_msg = _('Done checking.  Sleeping for %d seconds.')
                $log.info(meth) { done_msg % [interval] }
                sleep interval
              end
            end  # loop do
          end  # Thread.new

          # return thread
          ret
        end