diff --git a/ChangeLog b/ChangeLog index 97a0ff5142..3a16b60546 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Sat Dec 19 17:17:04 2015 Nobuyoshi Nakada + + * lib/webrick/utils.rb (WEBrick::Utils::TimeoutHandler#initialize): + use WEBrick::Utils::TimeoutHandler::Thread, which is ignored by + LeakChecker#find_threads, instead of ::Thread to get rid of + thread leak checker. since this TimeoutHandler is resident + during tests because of Singleton, it waits for the next timeout + if it has any schedules. in the case of nested timeouts, inner + timeout does not cancel outer timeouts and then those schedules + still remain. + Sat Dec 19 14:28:01 2015 Jake Worth * ext/zlib/zlib.c (Init_zlib): [DOC] Fix double-word typo and diff --git a/lib/webrick/utils.rb b/lib/webrick/utils.rb index ed0f3da615..9c978a2b7b 100644 --- a/lib/webrick/utils.rb +++ b/lib/webrick/utils.rb @@ -177,8 +177,9 @@ module WEBrick @queue.pop elsif (wakeup -= now) > 0 begin - Timeout.timeout(wakeup) { @queue.pop } - rescue Timeout::Error + (th = Thread.start {@queue.pop}).join(wakeup) + ensure + th&.kill&.join end end @queue.clear