Bug #844
Interpreter wide IO deadlock
| Status: | Closed | Start date: | 12/10/2008 | |
|---|---|---|---|---|
| Priority: | Low | Due date: | ||
| Assignee: | - | % Done: | 100% |
|
| Category: | - | |||
| Target version: | - | |||
| ruby -v: |
Description
two threads reading from the same socket at same time produces race condition whichs locks interpreter
info at: http://coderrr.wordpress.com/2008/12/10/mri-io-deadlock/
code to repo:
require 'socket'
# if this ever stops printing we're screwed
Thread.new{loop{p 1;sleep 0.5}}
s = Thread.new do
cli = TCPServer.new(3020).accept
loop { cli.write 'hi' }
end
sock = TCPSocket.new('localhost', 3020)
2.times do
Thread.new do
loop { sock.readpartial 1024 }
end
end
s.join
Associated revisions
* eval.c (rb_thread_schedule): Don't change status of threads which
don't run next even if select notify readability/writability.
[ruby-core:20446]
History
Updated by Yukihiro Matsumoto about 3 years ago
Hi, In message "Re: [ruby-core:20907] Re: [Bug #844] Interpreter wide IO deadlock" on Sat, 27 Dec 2008 12:51:46 +0900, Tanaka Akira <akr@fsij.org> writes: |> I investigated the problem. | |There is similar problem with write. |Updated patch: | |% svn diff --diff-cmd diff -x '-u -p' |Index: eval.c Can you check in? matz.
Updated by Akira Tanaka about 3 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
Applied in changeset r21165.