summaryrefslogtreecommitdiff
path: root/test/io/wait
AgeCommit message (Collapse)Author
2025-06-03[ruby/io-wait] Alias value or join to take in old RubyHiroshi SHIBATA
https://github.com/ruby/io-wait/commit/cf84aea70d
2025-05-31`Ractor::Port`Koichi Sasada
* Added `Ractor::Port` * `Ractor::Port#receive` (support multi-threads) * `Rcator::Port#close` * `Ractor::Port#closed?` * Added some methods * `Ractor#join` * `Ractor#value` * `Ractor#monitor` * `Ractor#unmonitor` * Removed some methods * `Ractor#take` * `Ractor.yield` * Change the spec * `Racotr.select` You can wait for multiple sequences of messages with `Ractor::Port`. ```ruby ports = 3.times.map{ Ractor::Port.new } ports.map.with_index do |port, ri| Ractor.new port,ri do |port, ri| 3.times{|i| port << "r#{ri}-#{i}"} end end p ports.each{|port| pp 3.times.map{port.receive}} ``` In this example, we use 3 ports, and 3 Ractors send messages to them respectively. We can receive a series of messages from each port. You can use `Ractor#value` to get the last value of a Ractor's block: ```ruby result = Ractor.new do heavy_task() end.value ``` You can wait for the termination of a Ractor with `Ractor#join` like this: ```ruby Ractor.new do some_task() end.join ``` `#value` and `#join` are similar to `Thread#value` and `Thread#join`. To implement `#join`, `Ractor#monitor` (and `Ractor#unmonitor`) is introduced. This commit changes `Ractor.select()` method. It now only accepts ports or Ractors, and returns when a port receives a message or a Ractor terminates. We removes `Ractor.yield` and `Ractor#take` because: * `Ractor::Port` supports most of similar use cases in a simpler manner. * Removing them significantly simplifies the code. We also change the internal thread scheduler code (thread_pthread.c): * During barrier synchronization, we keep the `ractor_sched` lock to avoid deadlocks. This lock is released by `rb_ractor_sched_barrier_end()` which is called at the end of operations that require the barrier. * fix potential deadlock issues by checking interrupts just before setting UBF. https://bugs.ruby-lang.org/issues/21262 Notes: Merged: https://github.com/ruby/ruby/pull/13445
2025-04-30Use EnvUtil.apply_timeout_scale for test_io_wait.rbHiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/13212
2023-12-13Skip an unstable test on MinGWTakashi Kokubun
This test fails fairly frequently on MinGW: https://github.com/ruby/ruby/actions/runs/7195712496/job/19598924253#step:11:168 https://github.com/ruby/ruby/actions/runs/7191246799/job/19585627182#step:11:168 and we aren't actively working on stabilizing tests for MinGW.
2022-12-15Remove `require 'io/wait'` where it's no longer necessary. (#6932)Samuel Williams
* Remove `require 'io/wait'` as it's part of core now. * Update ruby specs using version gates. * Add note about why it's conditional. Notes: Merged-By: ioquatix <[email protected]>
2022-09-17Skip test_wait on MinGW CITakashi Kokubun
This test has been unstable, and it seems like we're not interested in fixing that for MinGW. https://github.com/ruby/ruby/actions/runs/3073317191/jobs/4965373284
2022-06-25[ruby/io-wait] Fix usage of `assert_raises` -> `assert_raise`. ↵Samuel Williams
(https://github.com/ruby/io-wait/pull/20) https://github.com/ruby/io-wait/commit/c5c6abbb5c
2022-06-25* remove trailing spaces. [ci skip]git
2022-06-25[ruby/io-wait] Don't add `IO#wait*` methods when `RUBY_IO_WAIT_METHODS` is ↵Samuel Williams
defined by Ruby. (https://github.com/ruby/io-wait/pull/19) * Fix return value compatibility with Ruby 2.x. * Don't add `IO#wait*` methods in Ruby 3.2+. https://github.com/ruby/io-wait/commit/54c504d089
2022-01-12[ruby/io-wait] Use omit instead of skip for test-unitHiroshi SHIBATA
https://github.com/ruby/io-wait/commit/75543ab1bc
2021-11-16[ruby/io-wait] Disable ractor test which is meaningless on earlier versionsNobuyoshi Nakada
https://github.com/ruby/io-wait/commit/e8e1e99d4c
2021-11-16[ruby/io-wait] Use `omit` as per test-unitNobuyoshi Nakada
https://github.com/ruby/io-wait/commit/1f59f7b02f
2021-03-07[ruby/io-wait] Declare as Ractor-safeNobuyoshi Nakada
Fixes https://bugs.ruby-lang.org/issues/17659 https://github.com/ruby/io-wait/commit/ba338b4764 Notes: Merged: https://github.com/ruby/ruby/pull/4244
2021-03-07[ruby/io-wait] Refined uncommon device type testsNobuyoshi Nakada
https://github.com/ruby/io-wait/commit/0c73ebcf5d Notes: Merged: https://github.com/ruby/ruby/pull/4244
2020-07-30Add explicitly require for Dir.mktmpdirHiroshi SHIBATA
2019-12-24Scale sleeping times to wait for the OS operationsNobuyoshi Nakada
2019-12-24Synchronize with a Queue instead of sleepingNobuyoshi Nakada
2019-12-24Revert "Scale sleeping times"Koichi Sasada
This reverts commit e57d6194218efc73c30f3fed9dd321d2e357030b. Test fails: http://ci.rvm.jp/results/trunk-gc-asserts@ruby-sky1/2518563 http://ci.rvm.jp/results/trunk-gc_compact@silicon-docker/2518533
2019-12-24Scale sleeping timesNobuyoshi Nakada
2018-12-31test_io_wait.rb: try to stabilize test_wait_readablek0kubun
that randomly fails https://rubyci.org/logs/mswinci.japaneast.cloudapp.azure.com/vc12-x64/ruby-trunk/log/20181231T103312Z.fail.html.gz git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66663 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-08-25test/io/wait/test_io_wait_uncommon.rb: relax /dev/random checknormal
Too many machines lack entropy to have a usable /dev/random. I had similar problems on my system until I started using haveged(8), but we can't require that for CI. cf. https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian/ruby-trunk/log/20180825T213003Z.fail.html.gz git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64540 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-08-09test/io/wait/test_io_wait_uncommon.rb (test_tty_wait): increase timeoutnormal
Apparently my tty can't keep up when I run test-all with TESTS='-v --no-retry' git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64247 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-05-15test_io_wait_uncommon: new test for uncommon file typesnormal
This should make portability problems more apparent when we try using ppoll with rb_wait_for_single_fd on FreeBSD or other non-Linux platforms. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63423 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-03-09* test/io/wait/test_io_wait.rb (test_wait_readwrite_timeout):odaira
select(2) in AIX returns "readable" for the write-side fd of a pipe, so it is not possible to use a pipe to test the read-write timeout of IO#wait on AIX. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54047 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-19test: use assert_not_*nobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53871 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-01-24wait readable/writablenobu
* ext/io/wait/wait.c (io_wait_readwrite): [EXPERIMENTAL] allow to wait for multiple modes, readable and writable, at once. the arguments may change in the future. [Feature #12013] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53642 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-01-24test_io_wait.rb: wait_readablenobu
* test/io/wait/test_io_wait.rb: add tests for IO#wait_readable, same as IO#wait. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53640 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-16Add frozen_string_literal: false for all filesnaruse
When you change this to true, you may need to add more tests. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-22test/io/wait/test_io_wait.rb (test_wait_eof): test return valuenormal
I wrote some code which relies on this nowadays, but Ruby <=2.2 and earlier behaved differently... git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52231 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-06-02use assert_raisenobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50727 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-04-12test_io_wait.rb: no EOF testnobu
* test/io/wait/test_io_wait.rb (test_wait_eof): just test timeout. follow r50263. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50266 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-01io/wait: fix return value for buffered readnormal
* ext/io/wait/wait.c (io_nread): wrap return value with INT2FIX Thanks to Yura Sokolov <[email protected]> [ruby-core:68369] [Bug#10923] * test/io/wait/test_io_wait.rb (test_nread_buffered): fix broken test git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49797 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-30Join threads.akr
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46256 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-01-11* test/io/wait/test_io_wait.rb (TestIOWait#test_wait_writable_timeout): giveusa
OS more time to clean up the file descriptor. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38775 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-29test_io_wait.rb: Bug #7420nobu
* test/io/wait/test_io_wait.rb (TestIOWait#fill_pipe): Errno::EWOULDBLOCK may not be the same as Errno::EAGAIN. patch by phasis68 (Heesob Park) at [ruby-core:49894]. [Bug #7420] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37984 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-21io/wait: add IO#wait_writable methodnobu
* ext/io/wait/wait.c (io_wait_writable): this is easier to use than IO.select for a single IO object and is immune to the limitations/innefficiency of select() on platforms where poll/ppoll is available. patched by Eric Wong. [Feature #4646] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37785 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-09-21* test/io/wait/test_io_wait.rb (TestIOWait#setup): of course, theusa
behavior of mingw is just same with mswin. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33305 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-05-31* test/io/wait/test_io_wait.rb (TestIOWait#{test_nread,test_ready?,usa
test_wait}: give system some time to process the written data. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31857 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-05-07* test/io/wait/test_io_wait.rb: Linux socketpair(2) only supportkosaki
AF_UNIX, but windows socketpair doesn't support it. we can't avoid platform check. sigh! git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31472 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-05-07* test/io/wait/test_io_wait.rb: use Socket.pair instaed of pipe.kosaki
Windows can only treat a socket. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31470 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-05-07* test/io/wait/test_io_wait.rb: skip tests if the platform iskosaki
mswin. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31469 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-04-30fix commit mistake of r31389.kosaki
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31398 b2dd03c8-39d4-4d8f-98ff-823fe69b080e