ruby-core

Mailing list archive

[ruby-core:67117] [ruby-trunk - Bug #10644] [Open] WEBrick TimeoutHandler race condition

From: alandacosta@...
Date: 2014-12-25 03:25:44 UTC
List: ruby-core #67117
Issue #10644 has been reported by Alan Da Costa.

----------------------------------------
Bug #10644: WEBrick TimeoutHandler race condition
https://bugs.ruby-lang.org/issues/10644

* Author: Alan Da Costa
* Status: Open
* Priority: Normal
* Assignee: 
* Category: lib
* Target version: 
* ruby -v: 2.1.5
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
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?



-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next