Project

General

Profile

Actions

Bug #10644

closed

WEBrick TimeoutHandler race condition

Added by adacosta (Alan Da Costa) over 9 years ago. Updated almost 9 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
2.1.5
[ruby-core:67117]

Description

I discovered what looks like a race in the WEBrick TimeoutHandler.

In WEBrick::Utils::TimeoutHandler#initialize, every 0.5 seconds, @timeout_info is iterated.

If WEBrick::Utils::TimeoutHandler.register is called when @timeout_info is being iterated, it results in a RuntimeError of "can't add a new key into hash during iteration (RuntimeError)"

I've created a gist to demonstrate the issue, https://gist.github.com/adacosta/65358efeb970ac84ca75 . In my gist, the initialize method has been augmented to stall the @timeout_info iteration, to help demonstrate the problem.

I've also noted a potential fix as wrapping the @timeout_info iteration with a TimeoutMutex.synchronize {} . I'll gladly package my fix into a patch if desired.

Thoughts?

Updated by nagachika (Tomoyuki Chikanaga) almost 9 years ago

  • Status changed from Open to Rejected

Hello,

The definition of WEBrick::Utils::TimeoutHandler#initialize in your gist is too old and the issues was already fixed at r35258.

See https://github.com/ruby/ruby/blob/v2_1_5/lib/webrick/utils.rb#L168 and https://github.com/ruby/ruby/commit/7b18633804c606e8bcccfbb44e7d7b795e777ea6

Actions

Also available in: Atom PDF

Like0
Like0