Sha256: eada399fd7e58ce06d44c7be71d861817eb47355f8bc359373c266ed4dba9029

Contents?: true

Size: 898 Bytes

Versions: 1

Compression:

Stored size: 898 Bytes

Contents

require "unicorn/timeout_backtracer/version"

require 'open3'
require 'rubygems/installer'
require 'unicorn'

class Unicorn::HttpServer
  alias_method :unlogged_kill_worker, :kill_worker
  def kill_worker(signal, wpid)
    bin_dir = Gem::Installer.new('gdbruby').bin_dir
    gdbruby_bin = "#{bin_dir}/gdbruby.rb"
    if ENV['ENABLE_TIMEOUT_LOG'].to_i.nonzero? && FileTest.executable?(gdbruby_bin)
      if signal == :KILL
        begin
          pid = fork do
            path = "/tmp/unicorn-timeout-backtrace-#{Process.pid}.log"
            log_file = File.open(path, "a")
            IO.popen("#{gdbruby_bin} #{wpid}", "r+") do |io|
              while line = io.gets
                log_file.puts line
              end
            end
          end
          Process.waitpid(pid)
        rescue => e
          p e
        end
      end
    end
    unlogged_kill_worker(signal, wpid)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
unicorn-timeout_backtracer-0.0.2 lib/unicorn/timeout_backtracer.rb