class PrestoSqlParser::SupportProcess
Public Class Methods
new(idle_wait: 2, with_tokens:)
click to toggle source
# File lib/presto_sql_parser/support_process.rb, line 5 def initialize(idle_wait: 2, with_tokens:) @idle_wait = idle_wait @with_tokens = with_tokens @mutex = Mutex.new @last_used_pid = nil @pipe = nil @pid = nil end
Public Instance Methods
kill!()
click to toggle source
# File lib/presto_sql_parser/support_process.rb, line 32 def kill! @mutex.synchronize do if @pid Process.kill("KILL", @pid) @pipe.close rescue nil @pipe = nil @pid = nil end end end
receive_line()
click to toggle source
# File lib/presto_sql_parser/support_process.rb, line 52 def receive_line @pipe.gets end
send_line(line)
click to toggle source
# File lib/presto_sql_parser/support_process.rb, line 43 def send_line(line) @mutex.synchronize do # block kill! during execution start! unless @pipe @pipe.puts line @last_used_pid = @pipe.pid end nil end
start!()
click to toggle source
# File lib/presto_sql_parser/support_process.rb, line 14 def start! return if @pipe cmd = ( [PrestoSqlParser.java_cmd] + PrestoSqlParser.java_args.map {|arg| Shellwords.escape(arg) } + ["-jar", Shellwords.escape(PrestoSqlParser.jar_path)] ).join(' ') if @with_tokens cmd << " --with-tokens" end @pipe = IO.popen(PrestoSqlParser.java_env, cmd, "r+", external_encoding: 'UTF-8') @pid = @pipe.pid Thread.new(@pid, &method(:monitor_thread)) end
Private Instance Methods
monitor_thread(pid)
click to toggle source
# File lib/presto_sql_parser/support_process.rb, line 58 def monitor_thread(pid) while true done = Process.waitpid2(pid, Process::WNOHANG) rescue true break if done sleep @idle_wait if @last_used_pid != pid kill! rescue nil end @last_used_pid = nil # Next check kills the process end end