ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [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).