* [ruby-core:103439] [Ruby master Bug#17801] repeated read from PTY blocks all Fibers
@ 2021-04-13 19:31 pebauer68
2021-04-13 19:51 ` [ruby-core:103440] " samuel
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: pebauer68 @ 2021-04-13 19:31 UTC (permalink / raw)
To: ruby-core
Issue #17801 has been reported by pebauer (peter bauer).
----------------------------------------
Bug #17801: repeated read from PTY blocks all Fibers
https://bugs.ruby-lang.org/issues/17801
* Author: pebauer (peter bauer)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
Ruby version:
ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
used Scheduler:
https://github.com/ruby/ruby/blob/master/test/fiber/scheduler.rb
Example Code which should work:
`require 'pty'
require "./scheduler.rb"
line_event = TracePoint.new(:line) do |t|
p [t.lineno, t.method_id, t.path]
end
Fiber.set_scheduler(Scheduler.new)
master, slave = PTY.open
read, write = IO.pipe
pid = spawn("bash", :in=>read, :out=>slave)
read.close # we dont need the read
slave.close # or the slave
line_event.enable do
Fiber.schedule do
loop do
puts "date"
write.puts "date"
sleep 1
end
end
Fiber.schedule do
loop do
puts master.gets.chomp
puts master.gets.chomp # this line blocks all fibers, why ?
puts "test"
sleep 1
end
end
#write.close
end`
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:103440] [Ruby master Bug#17801] repeated read from PTY blocks all Fibers
2021-04-13 19:31 [ruby-core:103439] [Ruby master Bug#17801] repeated read from PTY blocks all Fibers pebauer68
@ 2021-04-13 19:51 ` samuel
2021-04-13 20:05 ` [ruby-core:103441] " pebauer68
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: samuel @ 2021-04-13 19:51 UTC (permalink / raw)
To: ruby-core
Issue #17801 has been updated by ioquatix (Samuel Williams).
Assignee set to ioquatix (Samuel Williams)
Description updated
Investigating.
----------------------------------------
Bug #17801: repeated read from PTY blocks all Fibers
https://bugs.ruby-lang.org/issues/17801#change-91532
* Author: pebauer (peter bauer)
* Status: Open
* Priority: Normal
* Assignee: ioquatix (Samuel Williams)
* ruby -v: ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
Ruby version:
ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
used Scheduler:
https://github.com/ruby/ruby/blob/master/test/fiber/scheduler.rb
Example Code which should work:
```
require 'pty'
require "./scheduler.rb"
line_event = TracePoint.new(:line) do |t|
p [t.lineno, t.method_id, t.path]
end
Fiber.set_scheduler(Scheduler.new)
master, slave = PTY.open
read, write = IO.pipe
pid = spawn("bash", :in=>read, :out=>slave)
read.close # we dont need the read
slave.close # or the slave
line_event.enable do
Fiber.schedule do
loop do
puts "date"
write.puts "date"
sleep 1
end
end
Fiber.schedule do
loop do
puts master.gets.chomp
puts master.gets.chomp # this line blocks all fibers, why ?
puts "test"
sleep 1
end
end
#write.close
end
```
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:103441] [Ruby master Bug#17801] repeated read from PTY blocks all Fibers
2021-04-13 19:31 [ruby-core:103439] [Ruby master Bug#17801] repeated read from PTY blocks all Fibers pebauer68
2021-04-13 19:51 ` [ruby-core:103440] " samuel
@ 2021-04-13 20:05 ` pebauer68
2021-04-14 19:16 ` [ruby-core:103452] " pebauer68
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: pebauer68 @ 2021-04-13 20:05 UTC (permalink / raw)
To: ruby-core
Issue #17801 has been updated by pebauer (peter bauer).
expected output from script on cli:
date
Di 13 Apr 2021 21:51:20 CEST
test
date
Di 13 Apr 2021 21:51:21 CEST
test
----------------------------------------
Bug #17801: repeated read from PTY blocks all Fibers
https://bugs.ruby-lang.org/issues/17801#change-91533
* Author: pebauer (peter bauer)
* Status: Open
* Priority: Normal
* Assignee: ioquatix (Samuel Williams)
* ruby -v: ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
Ruby version:
ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
used Scheduler:
https://github.com/ruby/ruby/blob/master/test/fiber/scheduler.rb
Example Code which should work:
```
require 'pty'
require "./scheduler.rb"
line_event = TracePoint.new(:line) do |t|
p [t.lineno, t.method_id, t.path]
end
Fiber.set_scheduler(Scheduler.new)
master, slave = PTY.open
read, write = IO.pipe
pid = spawn("bash", :in=>read, :out=>slave)
read.close # we dont need the read
slave.close # or the slave
line_event.enable do
Fiber.schedule do
loop do
puts "date"
write.puts "date"
sleep 1
end
end
Fiber.schedule do
loop do
puts master.gets.chomp
puts master.gets.chomp # this line blocks all fibers, why ?
puts "test"
sleep 1
end
end
#write.close
end
```
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:103452] [Ruby master Bug#17801] repeated read from PTY blocks all Fibers
2021-04-13 19:31 [ruby-core:103439] [Ruby master Bug#17801] repeated read from PTY blocks all Fibers pebauer68
2021-04-13 19:51 ` [ruby-core:103440] " samuel
2021-04-13 20:05 ` [ruby-core:103441] " pebauer68
@ 2021-04-14 19:16 ` pebauer68
2021-06-23 10:32 ` [ruby-core:104387] " samuel
2021-06-23 18:59 ` [ruby-core:104391] " pebauer68
4 siblings, 0 replies; 6+ messages in thread
From: pebauer68 @ 2021-04-14 19:16 UTC (permalink / raw)
To: ruby-core
Issue #17801 has been updated by pebauer (peter bauer).
ioquatix (Samuel Williams) wrote in #note-1:
> Investigating.
Hello Samuel, if found the following:
**A read on a PTY master which is not ready seems to block all fibers.**
I think not ready - means 0 Bytes to read, which can be checked via IO.nread
`Workaround 1:
Fiber.schedule do
loop do
puts master.gets if master.ready?
sleep 0.1
end
end
Workaround 2: # never try to read more bytes then available
Fiber.schedule do
loop do
puts master.read(master.nread) if master.nread > 0
sleep 0.1
end
end`
----------------------------------------
Bug #17801: repeated read from PTY blocks all Fibers
https://bugs.ruby-lang.org/issues/17801#change-91545
* Author: pebauer (peter bauer)
* Status: Open
* Priority: Normal
* Assignee: ioquatix (Samuel Williams)
* ruby -v: ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
Ruby version:
ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
used Scheduler:
https://github.com/ruby/ruby/blob/master/test/fiber/scheduler.rb
Example Code which should work:
```
require 'pty'
require "./scheduler.rb"
line_event = TracePoint.new(:line) do |t|
p [t.lineno, t.method_id, t.path]
end
Fiber.set_scheduler(Scheduler.new)
master, slave = PTY.open
read, write = IO.pipe
pid = spawn("bash", :in=>read, :out=>slave)
read.close # we dont need the read
slave.close # or the slave
line_event.enable do
Fiber.schedule do
loop do
puts "date"
write.puts "date"
sleep 1
end
end
Fiber.schedule do
loop do
puts master.gets.chomp
puts master.gets.chomp # this line blocks all fibers, why ?
puts "test"
sleep 1
end
end
#write.close
end
```
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:104387] [Ruby master Bug#17801] repeated read from PTY blocks all Fibers
2021-04-13 19:31 [ruby-core:103439] [Ruby master Bug#17801] repeated read from PTY blocks all Fibers pebauer68
` (2 preceding siblings ...)
2021-04-14 19:16 ` [ruby-core:103452] " pebauer68
@ 2021-06-23 10:32 ` samuel
2021-06-23 18:59 ` [ruby-core:104391] " pebauer68
4 siblings, 0 replies; 6+ messages in thread
From: samuel @ 2021-06-23 10:32 UTC (permalink / raw)
To: ruby-core
Issue #17801 has been updated by ioquatix (Samuel Williams).
This works for me if I set:
```
master.nonblock = true
```
Can you try it and report back?
We could consider making this the default.
----------------------------------------
Bug #17801: repeated read from PTY blocks all Fibers
https://bugs.ruby-lang.org/issues/17801#change-92622
* Author: pebauer (peter bauer)
* Status: Open
* Priority: Normal
* Assignee: ioquatix (Samuel Williams)
* ruby -v: ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
Ruby version:
ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
used Scheduler:
https://github.com/ruby/ruby/blob/master/test/fiber/scheduler.rb
Example Code which should work:
```
require 'pty'
require "./scheduler.rb"
line_event = TracePoint.new(:line) do |t|
p [t.lineno, t.method_id, t.path]
end
Fiber.set_scheduler(Scheduler.new)
master, slave = PTY.open
read, write = IO.pipe
pid = spawn("bash", :in=>read, :out=>slave)
read.close # we dont need the read
slave.close # or the slave
line_event.enable do
Fiber.schedule do
loop do
puts "date"
write.puts "date"
sleep 1
end
end
Fiber.schedule do
loop do
puts master.gets.chomp
puts master.gets.chomp # this line blocks all fibers, why ?
puts "test"
sleep 1
end
end
#write.close
end
```
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:104391] [Ruby master Bug#17801] repeated read from PTY blocks all Fibers
2021-04-13 19:31 [ruby-core:103439] [Ruby master Bug#17801] repeated read from PTY blocks all Fibers pebauer68
` (3 preceding siblings ...)
2021-06-23 10:32 ` [ruby-core:104387] " samuel
@ 2021-06-23 18:59 ` pebauer68
4 siblings, 0 replies; 6+ messages in thread
From: pebauer68 @ 2021-06-23 18:59 UTC (permalink / raw)
To: ruby-core
Issue #17801 has been updated by pebauer (peter bauer).
Yes, this works. Thank you.
master.nonblock = true
----------------------------------------
Bug #17801: repeated read from PTY blocks all Fibers
https://bugs.ruby-lang.org/issues/17801#change-92629
* Author: pebauer (peter bauer)
* Status: Open
* Priority: Normal
* Assignee: ioquatix (Samuel Williams)
* ruby -v: ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
Ruby version:
ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
used Scheduler:
https://github.com/ruby/ruby/blob/master/test/fiber/scheduler.rb
Example Code which should work:
```
require 'pty'
require "./scheduler.rb"
line_event = TracePoint.new(:line) do |t|
p [t.lineno, t.method_id, t.path]
end
Fiber.set_scheduler(Scheduler.new)
master, slave = PTY.open
read, write = IO.pipe
pid = spawn("bash", :in=>read, :out=>slave)
read.close # we dont need the read
slave.close # or the slave
line_event.enable do
Fiber.schedule do
loop do
puts "date"
write.puts "date"
sleep 1
end
end
Fiber.schedule do
loop do
puts master.gets.chomp
puts master.gets.chomp # this line blocks all fibers, why ?
puts "test"
sleep 1
end
end
#write.close
end
```
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-06-23 18:59 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-13 19:31 [ruby-core:103439] [Ruby master Bug#17801] repeated read from PTY blocks all Fibers pebauer68
2021-04-13 19:51 ` [ruby-core:103440] " samuel
2021-04-13 20:05 ` [ruby-core:103441] " pebauer68
2021-04-14 19:16 ` [ruby-core:103452] " pebauer68
2021-06-23 10:32 ` [ruby-core:104387] " samuel
2021-06-23 18:59 ` [ruby-core:104391] " pebauer68
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 read-only IMAP folder(s) and NNTP newsgroup(s).