ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:109330] [Ruby master Bug#18940] Ruby Ractor fails with IOError when handling higher concurrency
@ 2022-07-26 18:33 brodock (Gabriel Mazetto)
  2022-10-12  8:04 ` [ruby-core:110270] " hsbt (Hiroshi SHIBATA)
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: brodock (Gabriel Mazetto) @ 2022-07-26 18:33 UTC (permalink / raw)
  To: ruby-core

Issue #18940 has been reported by brodock (Gabriel Mazetto).

----------------------------------------
Bug #18940: Ruby Ractor fails with IOError when handling higher concurrency
https://bugs.ruby-lang.org/issues/18940

* Author: brodock (Gabriel Mazetto)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.2.0dev (2022-07-26T16:40:03Z master 3b1ed03d8c) [arm64-darwin21]
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
Reproduction server:

```
require 'socket'

# Set based on CPU count
CONCURRENCY = 8

server = TCPServer.new(8080)
workers = CONCURRENCY.times.map do
  Ractor.new do
    loop do
      # receive TCPSocket
      session = Ractor.recv

      request = session.gets
      puts request

      session.print "HTTP/1.1 200\r\n"
      session.print "Content-Type: text/html\r\n"
      session.print "\r\n"
      session.print "Hello world! Current time is #{Time.now}"
      session.close
    end
  end
end

loop do
  conn, _ = server.accept

  # pass TCPSocket to one of the workers
  workers.sample.send(conn, move: true)
end
```

run apache benchmark against code above:

```
ab -n 20000 -c 20 http://localhost:8080/
```

or run using hey (https://github.com/rakyll/hey):

```
hey -n 20000 -c 20 http://localhost:8080/
```

you should see something like this on the benchmark tool side:

```
Summary:
  Total:	32.9538 secs
  Slowest:	2.6317 secs
  Fastest:	0.0002 secs
  Average:	0.0331 secs
  Requests/sec:	606.9098


Response time histogram:
  0.000 [1]	|
  0.263 [16968]	|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.527 [1740]	|■■■■
  0.790 [0]	|
  1.053 [0]	|
  1.316 [0]	|
  1.579 [0]	|
  1.842 [0]	|
  2.105 [20]	|
  2.369 [0]	|
  2.632 [6]	|


Latency distribution:
  10% in 0.0008 secs
  25% in 0.0010 secs
  50% in 0.0012 secs
  75% in 0.0016 secs
  90% in 0.0075 secs
  95% in 0.3101 secs
  99% in 0.3175 secs

Details (average, fastest, slowest):
  DNS+dialup:	0.0322 secs, 0.0002 secs, 2.6317 secs
  DNS-lookup:	0.0006 secs, 0.0000 secs, 0.0127 secs
  req write:	0.0001 secs, 0.0000 secs, 0.0095 secs
  resp wait:	0.0007 secs, 0.0000 secs, 0.0140 secs
  resp read:	0.0001 secs, 0.0000 secs, 0.0088 secs

Status code distribution:
  [200]	18735 responses

Error distribution:
  [1231]	Get "http://localhost:8080/": dial tcp [::1]:8080: connect: connection refused
  [16]	Get "http://localhost:8080/": dial tcp [::1]:8080: connect: connection reset by peer
  [1]	Get "http://localhost:8080/": net/http: HTTP/1.x transport connection broken: unexpected EOF
  [1]	Get "http://localhost:8080/": read tcp 127.0.0.1:57078->127.0.0.1:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57054->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57058->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57059->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57062->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57067->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57068->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57069->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57070->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57071->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57072->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57075->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57076->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57087->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57088->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57089->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57090->[::1]:8080: read: connection reset by peer
```

and this on the ruby process:

```
...

GET / HTTP/1.1
GET / HTTP/1.1
#<Thread:0x0000000100fbf6e8 run> terminated with exception (report_on_exception is true):
ractor.rb:21:in `write': GET / HTTP/1.1
uninitialized stream (IOError)
	from ractor.rb:21:in `print'
	from ractor.rb:21:in `block (3 levels) in <main>'
	from ractor.rb:11:in `loop'
	from ractor.rb:11:in `block (2 levels) in <main>'
GET / HTTP/1.1
GET / HTTP/1.1
```




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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [ruby-core:110270] [Ruby master Bug#18940] Ruby Ractor fails with IOError when handling higher concurrency
  2022-07-26 18:33 [ruby-core:109330] [Ruby master Bug#18940] Ruby Ractor fails with IOError when handling higher concurrency brodock (Gabriel Mazetto)
@ 2022-10-12  8:04 ` hsbt (Hiroshi SHIBATA)
  2023-02-03 23:45 ` [ruby-core:112214] " brodock (Gabriel Mazetto) via ruby-core
  2025-07-04 21:16 ` [ruby-core:122652] [Ruby " jhawthorn (John Hawthorn) via ruby-core
  2 siblings, 0 replies; 4+ messages in thread
From: hsbt (Hiroshi SHIBATA) @ 2022-10-12  8:04 UTC (permalink / raw)
  To: ruby-core

Issue #18940 has been updated by hsbt (Hiroshi SHIBATA).

Status changed from Open to Assigned
Assignee set to ko1 (Koichi Sasada)

----------------------------------------
Bug #18940: Ruby Ractor fails with IOError when handling higher concurrency
https://bugs.ruby-lang.org/issues/18940#change-99556

* Author: brodock (Gabriel Mazetto)
* Status: Assigned
* Priority: Normal
* Assignee: ko1 (Koichi Sasada)
* ruby -v: ruby 3.2.0dev (2022-07-26T16:40:03Z master 3b1ed03d8c) [arm64-darwin21]
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
Reproduction server:

```
require 'socket'

# Set based on CPU count
CONCURRENCY = 8

server = TCPServer.new(8080)
workers = CONCURRENCY.times.map do
  Ractor.new do
    loop do
      # receive TCPSocket
      session = Ractor.recv

      request = session.gets
      puts request

      session.print "HTTP/1.1 200\r\n"
      session.print "Content-Type: text/html\r\n"
      session.print "\r\n"
      session.print "Hello world! Current time is #{Time.now}"
      session.close
    end
  end
end

loop do
  conn, _ = server.accept

  # pass TCPSocket to one of the workers
  workers.sample.send(conn, move: true)
end
```

run apache benchmark against code above:

```
ab -n 20000 -c 20 http://localhost:8080/
```

or run using hey (https://github.com/rakyll/hey):

```
hey -n 20000 -c 20 http://localhost:8080/
```

you should see something like this on the benchmark tool side:

```
Summary:
  Total:	32.9538 secs
  Slowest:	2.6317 secs
  Fastest:	0.0002 secs
  Average:	0.0331 secs
  Requests/sec:	606.9098


Response time histogram:
  0.000 [1]	|
  0.263 [16968]	|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.527 [1740]	|■■■■
  0.790 [0]	|
  1.053 [0]	|
  1.316 [0]	|
  1.579 [0]	|
  1.842 [0]	|
  2.105 [20]	|
  2.369 [0]	|
  2.632 [6]	|


Latency distribution:
  10% in 0.0008 secs
  25% in 0.0010 secs
  50% in 0.0012 secs
  75% in 0.0016 secs
  90% in 0.0075 secs
  95% in 0.3101 secs
  99% in 0.3175 secs

Details (average, fastest, slowest):
  DNS+dialup:	0.0322 secs, 0.0002 secs, 2.6317 secs
  DNS-lookup:	0.0006 secs, 0.0000 secs, 0.0127 secs
  req write:	0.0001 secs, 0.0000 secs, 0.0095 secs
  resp wait:	0.0007 secs, 0.0000 secs, 0.0140 secs
  resp read:	0.0001 secs, 0.0000 secs, 0.0088 secs

Status code distribution:
  [200]	18735 responses

Error distribution:
  [1231]	Get "http://localhost:8080/": dial tcp [::1]:8080: connect: connection refused
  [16]	Get "http://localhost:8080/": dial tcp [::1]:8080: connect: connection reset by peer
  [1]	Get "http://localhost:8080/": net/http: HTTP/1.x transport connection broken: unexpected EOF
  [1]	Get "http://localhost:8080/": read tcp 127.0.0.1:57078->127.0.0.1:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57054->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57058->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57059->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57062->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57067->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57068->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57069->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57070->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57071->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57072->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57075->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57076->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57087->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57088->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57089->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57090->[::1]:8080: read: connection reset by peer
```

and this on the ruby process:

```
...

GET / HTTP/1.1
GET / HTTP/1.1
#<Thread:0x0000000100fbf6e8 run> terminated with exception (report_on_exception is true):
ractor.rb:21:in `write': GET / HTTP/1.1
uninitialized stream (IOError)
	from ractor.rb:21:in `print'
	from ractor.rb:21:in `block (3 levels) in <main>'
	from ractor.rb:11:in `loop'
	from ractor.rb:11:in `block (2 levels) in <main>'
GET / HTTP/1.1
GET / HTTP/1.1
```




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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [ruby-core:112214] [Ruby master Bug#18940] Ruby Ractor fails with IOError when handling higher concurrency
  2022-07-26 18:33 [ruby-core:109330] [Ruby master Bug#18940] Ruby Ractor fails with IOError when handling higher concurrency brodock (Gabriel Mazetto)
  2022-10-12  8:04 ` [ruby-core:110270] " hsbt (Hiroshi SHIBATA)
@ 2023-02-03 23:45 ` brodock (Gabriel Mazetto) via ruby-core
  2025-07-04 21:16 ` [ruby-core:122652] [Ruby " jhawthorn (John Hawthorn) via ruby-core
  2 siblings, 0 replies; 4+ messages in thread
From: brodock (Gabriel Mazetto) via ruby-core @ 2023-02-03 23:45 UTC (permalink / raw)
  To: ruby-core; +Cc: brodock (Gabriel Mazetto)

Issue #18940 has been updated by brodock (Gabriel Mazetto).


There is a chance that the route problem is related to https://bugs.ruby-lang.org/issues/19412

----------------------------------------
Bug #18940: Ruby Ractor fails with IOError when handling higher concurrency
https://bugs.ruby-lang.org/issues/18940#change-101642

* Author: brodock (Gabriel Mazetto)
* Status: Assigned
* Priority: Normal
* Assignee: ko1 (Koichi Sasada)
* ruby -v: ruby 3.2.0dev (2022-07-26T16:40:03Z master 3b1ed03d8c) [arm64-darwin21]
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
Reproduction server:

```
require 'socket'

# Set based on CPU count
CONCURRENCY = 8

server = TCPServer.new(8080)
workers = CONCURRENCY.times.map do
  Ractor.new do
    loop do
      # receive TCPSocket
      session = Ractor.recv

      request = session.gets
      puts request

      session.print "HTTP/1.1 200\r\n"
      session.print "Content-Type: text/html\r\n"
      session.print "\r\n"
      session.print "Hello world! Current time is #{Time.now}"
      session.close
    end
  end
end

loop do
  conn, _ = server.accept

  # pass TCPSocket to one of the workers
  workers.sample.send(conn, move: true)
end
```

run apache benchmark against code above:

```
ab -n 20000 -c 20 http://localhost:8080/
```

or run using hey (https://github.com/rakyll/hey):

```
hey -n 20000 -c 20 http://localhost:8080/
```

you should see something like this on the benchmark tool side:

```
Summary:
  Total:	32.9538 secs
  Slowest:	2.6317 secs
  Fastest:	0.0002 secs
  Average:	0.0331 secs
  Requests/sec:	606.9098


Response time histogram:
  0.000 [1]	|
  0.263 [16968]	|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.527 [1740]	|■■■■
  0.790 [0]	|
  1.053 [0]	|
  1.316 [0]	|
  1.579 [0]	|
  1.842 [0]	|
  2.105 [20]	|
  2.369 [0]	|
  2.632 [6]	|


Latency distribution:
  10% in 0.0008 secs
  25% in 0.0010 secs
  50% in 0.0012 secs
  75% in 0.0016 secs
  90% in 0.0075 secs
  95% in 0.3101 secs
  99% in 0.3175 secs

Details (average, fastest, slowest):
  DNS+dialup:	0.0322 secs, 0.0002 secs, 2.6317 secs
  DNS-lookup:	0.0006 secs, 0.0000 secs, 0.0127 secs
  req write:	0.0001 secs, 0.0000 secs, 0.0095 secs
  resp wait:	0.0007 secs, 0.0000 secs, 0.0140 secs
  resp read:	0.0001 secs, 0.0000 secs, 0.0088 secs

Status code distribution:
  [200]	18735 responses

Error distribution:
  [1231]	Get "http://localhost:8080/": dial tcp [::1]:8080: connect: connection refused
  [16]	Get "http://localhost:8080/": dial tcp [::1]:8080: connect: connection reset by peer
  [1]	Get "http://localhost:8080/": net/http: HTTP/1.x transport connection broken: unexpected EOF
  [1]	Get "http://localhost:8080/": read tcp 127.0.0.1:57078->127.0.0.1:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57054->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57058->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57059->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57062->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57067->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57068->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57069->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57070->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57071->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57072->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57075->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57076->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57087->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57088->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57089->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57090->[::1]:8080: read: connection reset by peer
```

and this on the ruby process:

```
...

GET / HTTP/1.1
GET / HTTP/1.1
#<Thread:0x0000000100fbf6e8 run> terminated with exception (report_on_exception is true):
ractor.rb:21:in `write': GET / HTTP/1.1
uninitialized stream (IOError)
	from ractor.rb:21:in `print'
	from ractor.rb:21:in `block (3 levels) in <main>'
	from ractor.rb:11:in `loop'
	from ractor.rb:11:in `block (2 levels) in <main>'
GET / HTTP/1.1
GET / HTTP/1.1
```




-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [ruby-core:122652] [Ruby Bug#18940] Ruby Ractor fails with IOError when handling higher concurrency
  2022-07-26 18:33 [ruby-core:109330] [Ruby master Bug#18940] Ruby Ractor fails with IOError when handling higher concurrency brodock (Gabriel Mazetto)
  2022-10-12  8:04 ` [ruby-core:110270] " hsbt (Hiroshi SHIBATA)
  2023-02-03 23:45 ` [ruby-core:112214] " brodock (Gabriel Mazetto) via ruby-core
@ 2025-07-04 21:16 ` jhawthorn (John Hawthorn) via ruby-core
  2 siblings, 0 replies; 4+ messages in thread
From: jhawthorn (John Hawthorn) via ruby-core @ 2025-07-04 21:16 UTC (permalink / raw)
  To: ruby-core; +Cc: jhawthorn (John Hawthorn)

Issue #18940 has been updated by jhawthorn (John Hawthorn).

Status changed from Assigned to Closed

This doesn't reproduce on my machine on 3.5dev, and there have been a number of improvements to Ractors likely to have solved this. Please reopen if that's not the case :)

----------------------------------------
Bug #18940: Ruby Ractor fails with IOError when handling higher concurrency
https://bugs.ruby-lang.org/issues/18940#change-113932

* Author: brodock (Gabriel Mazetto)
* Status: Closed
* Assignee: ractor
* ruby -v: ruby 3.2.0dev (2022-07-26T16:40:03Z master 3b1ed03d8c) [arm64-darwin21]
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
Reproduction server:

```
require 'socket'

# Set based on CPU count
CONCURRENCY = 8

server = TCPServer.new(8080)
workers = CONCURRENCY.times.map do
  Ractor.new do
    loop do
      # receive TCPSocket
      session = Ractor.recv

      request = session.gets
      puts request

      session.print "HTTP/1.1 200\r\n"
      session.print "Content-Type: text/html\r\n"
      session.print "\r\n"
      session.print "Hello world! Current time is #{Time.now}"
      session.close
    end
  end
end

loop do
  conn, _ = server.accept

  # pass TCPSocket to one of the workers
  workers.sample.send(conn, move: true)
end
```

run apache benchmark against code above:

```
ab -n 20000 -c 20 http://localhost:8080/
```

or run using hey (https://github.com/rakyll/hey):

```
hey -n 20000 -c 20 http://localhost:8080/
```

you should see something like this on the benchmark tool side:

```
Summary:
  Total:	32.9538 secs
  Slowest:	2.6317 secs
  Fastest:	0.0002 secs
  Average:	0.0331 secs
  Requests/sec:	606.9098


Response time histogram:
  0.000 [1]	|
  0.263 [16968]	|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.527 [1740]	|■■■■
  0.790 [0]	|
  1.053 [0]	|
  1.316 [0]	|
  1.579 [0]	|
  1.842 [0]	|
  2.105 [20]	|
  2.369 [0]	|
  2.632 [6]	|


Latency distribution:
  10% in 0.0008 secs
  25% in 0.0010 secs
  50% in 0.0012 secs
  75% in 0.0016 secs
  90% in 0.0075 secs
  95% in 0.3101 secs
  99% in 0.3175 secs

Details (average, fastest, slowest):
  DNS+dialup:	0.0322 secs, 0.0002 secs, 2.6317 secs
  DNS-lookup:	0.0006 secs, 0.0000 secs, 0.0127 secs
  req write:	0.0001 secs, 0.0000 secs, 0.0095 secs
  resp wait:	0.0007 secs, 0.0000 secs, 0.0140 secs
  resp read:	0.0001 secs, 0.0000 secs, 0.0088 secs

Status code distribution:
  [200]	18735 responses

Error distribution:
  [1231]	Get "http://localhost:8080/": dial tcp [::1]:8080: connect: connection refused
  [16]	Get "http://localhost:8080/": dial tcp [::1]:8080: connect: connection reset by peer
  [1]	Get "http://localhost:8080/": net/http: HTTP/1.x transport connection broken: unexpected EOF
  [1]	Get "http://localhost:8080/": read tcp 127.0.0.1:57078->127.0.0.1:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57054->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57058->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57059->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57062->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57067->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57068->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57069->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57070->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57071->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57072->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57075->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57076->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57087->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57088->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57089->[::1]:8080: read: connection reset by peer
  [1]	Get "http://localhost:8080/": read tcp [::1]:57090->[::1]:8080: read: connection reset by peer
```

and this on the ruby process:

```
...

GET / HTTP/1.1
GET / HTTP/1.1
#<Thread:0x0000000100fbf6e8 run> terminated with exception (report_on_exception is true):
ractor.rb:21:in `write': GET / HTTP/1.1
uninitialized stream (IOError)
	from ractor.rb:21:in `print'
	from ractor.rb:21:in `block (3 levels) in <main>'
	from ractor.rb:11:in `loop'
	from ractor.rb:11:in `block (2 levels) in <main>'
GET / HTTP/1.1
GET / HTTP/1.1
```




-- 
https://bugs.ruby-lang.org/
______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-07-04 21:17 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-26 18:33 [ruby-core:109330] [Ruby master Bug#18940] Ruby Ractor fails with IOError when handling higher concurrency brodock (Gabriel Mazetto)
2022-10-12  8:04 ` [ruby-core:110270] " hsbt (Hiroshi SHIBATA)
2023-02-03 23:45 ` [ruby-core:112214] " brodock (Gabriel Mazetto) via ruby-core
2025-07-04 21:16 ` [ruby-core:122652] [Ruby " jhawthorn (John Hawthorn) via ruby-core

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).