Actions
Bug #10644
closedWEBrick TimeoutHandler race condition
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?
Actions
Like0
Like0