Project

General

Profile

ยซ Previous | Next ยป 

Revision bd583ca6

Added by ko1 (Koichi Sasada) over 1 year ago

retry on cancelling of getaddrinfo

When the registerred unblock function is called, it should retry
the cancelled blocking function if possible after checkints.

For example, SIGCHLD can cancel this method, but it should not
raise any exception if there is no trap handlers.

The following is repro-code:

require 'socket'
PN = 10_000

1000000.times{
  p _1
  PN.times{
    fork{
      sleep rand(0.3)
    }
  }
  i = 0
  while i<PN
    cpid = Process.wait -1, Process::WNOHANG
    if cpid
      # p [i, cpid]
      i += 1
    end

    begin
      TCPServer.new(nil, 0).close
    rescue
      p $!
      exit!
    end
  end
}