mentos

in lib/pygments/popen.rb [210:262]


    def mentos(method, args=[], kwargs={}, original_code=nil)
      
      start unless alive?

      begin
        
        timeout_time = 8

        Timeout::timeout(timeout_time) do
          
          
          
          id = (0...8).map{65.+(rand(25)).chr}.join
          code = add_ids(original_code, id) if original_code

          
          if code
            bytesize = code.bytesize
          else
            bytesize = 0
          end

          kwargs.freeze
          kwargs = kwargs.merge("fd" => @out.to_i, "id" => id, "bytes" => bytesize)
          out_header = Yajl.dump(:method => method, :args => args, :kwargs => kwargs)

          
          bits = get_fixed_bits_from_header(out_header)
          @in.write(bits)

          
          write_data(out_header, code)

          
          header = get_header

          
          res = handle_header_and_return(header, id)

          
          return_result(res, method)
        end
      rescue Timeout::Error
        
        @log.error "[#{Time.now.iso8601}] Timeout on a mentos #{method} call"
        stop "Timeout on mentos #{method} call."
      end

    rescue Errno::EPIPE, EOFError
    stop "EPIPE"
    raise MentosError, "EPIPE"
    end