module Timeout

def self.create_timeout_thread

def self.create_timeout_thread
  watcher = Thread.new do
    requests = []
    while true
      until QUEUE.empty? and !requests.empty? # wait to have at least one request
        req = QUEUE.pop
        requests << req unless req.done?
      end
      closest_deadline = requests.min_by(&:deadline).deadline
      now = 0.0
      QUEUE_MUTEX.synchronize do
        while (now = GET_TIME.call(Process::CLOCK_MONOTONIC)) < closest_deadline and QUEUE.empty?
          CONDVAR.wait(QUEUE_MUTEX, closest_deadline - now)
        end
      end
      requests.each do |req|
        req.interrupt if req.expired?(now)
      end
      requests.reject!(&:done?)
    end
  end
  ThreadGroup::Default.add(watcher) unless watcher.group.enclosed?
  watcher.name = "Timeout stdlib thread"
  watcher.thread_variable_set(:"\0__detached_thread__", true)
  watcher
end