summaryrefslogtreecommitdiff
path: root/test/fiber
Commit message (Collapse)AuthorAgeFilesLines
* `rb_io_puts` should not write zero length strings. (#7806)Samuel Williams2023-05-151-0/+28
|
* Support `IO#pread` / `IO#pwrite` using fiber scheduler. (#7594)Samuel Williams2023-03-312-0/+99
| | | * Skip test if non-blocking file IO is not supported.
* Fix incorrect usage of `rb_fiber_scheduler_io_(p)(read|write)`. (#7593)Samuel Williams2023-03-251-0/+33
|
* Improve robustness of `io_wait` implementation. (#7456)Samuel Williams2023-03-071-13/+59
| | | | | - Restore correct handling of `duration`. - Don't delete from `@readable` or `@writable` unless it was added. - A little more documentation.
* Ensure Fiber storage is only accessed from the Fiber it belongs toBenoit Daloze2022-12-201-0/+12
|
* Use an experimental warning for Fiber#storage=Benoit Daloze2022-12-201-2/+5
|
* Never use the storage of another Fiber, that violates the whole designBenoit Daloze2022-12-201-2/+1
| | | | * See https://bugs.ruby-lang.org/issues/19078#note-30
* Add tests for `Queue#pop` with fiber scheduler. (#6953)Samuel Williams2022-12-171-0/+42
|
* Wait killed threadsNobuyoshi Nakada2022-12-021-0/+2
|
* Introduce `Fiber#storage` for inheritable fiber-scoped variables. (#6612)Samuel Williams2022-12-011-0/+101
|
* Add support for `sockaddr_un` on Windows. (#6513)Samuel Williams2022-11-172-19/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Windows: Fix warning about undefined if_indextoname() * Windows: Fix UNIXSocket on MINGW and make .pair more reliable * Windows: Use nonblock=true for read tests with scheduler * Windows: Move socket detection from File.socket? to File.stat Add S_IFSOCK to Windows and interpret reparse points accordingly. Enable tests that work now. * Windows: Use wide-char functions to UNIXSocket This fixes behaviour with non-ASCII characters. It also fixes deletion of temporary UNIXSocket.pair files. * Windows: Add UNIXSocket tests for specifics of Windows impl. * Windows: fix VC build due to missing _snwprintf Avoid usage of _snwprintf, since it fails linking ruby.dll like so: linking shared-library x64-vcruntime140-ruby320.dll x64-vcruntime140-ruby320.def : error LNK2001: unresolved external symbol snwprintf x64-vcruntime140-ruby320.def : error LNK2001: unresolved external symbol vsnwprintf_l whereas linking miniruby.exe succeeds. This patch uses snprintf on the UTF-8 string instead. Also remove branch GetWindowsDirectoryW, since it doesn't work. * Windows: Fix dangling symlink test failures Co-authored-by: Lars Kanis <kanis@comcard.de>
* mutex: Raise a ThreadError when detecting a fiber deadlock (#6680)Jean byroot Boussier2022-11-091-1/+21
| | | | | | | | | [Bug #19105] If no fiber scheduler is registered and the fiber that owns the lock and the one that try to acquire it both belong to the same thread, we're in a deadlock case. Co-authored-by: Jean Boussier <byroot@ruby-lang.org>
* We don't care about actual hostname resolution. (#6652)Samuel Williams2022-11-011-1/+1
| | | https://bugs.ruby-lang.org/issues/18380
* Avoid missed wakeup with fiber scheduler and Fiber.blocking. (#6588)Samuel Williams2022-10-202-0/+53
| | | * Ensure that blocked fibers don't prevent valid wakeups.
* Introduce `Fiber::Scheduler#io_select` hook for non-blocking `IO.select`. ↵Samuel Williams2022-10-152-0/+29
| | | | (#6559)
* Add missing `f.resume` to fiber test. (#6539)Samuel Williams2022-10-131-0/+1
|
* Simplify implementation of scheduler `io_read` and `io_write`. (#6527)Samuel Williams2022-10-121-6/+4
|
* Improvements to IO::Buffer implementation and documentation. (#6525)Samuel Williams2022-10-121-47/+34
|
* Introduce `Fiber.blocking{}` for bypassing the fiber scheduler. (#6498)Samuel Williams2022-10-061-0/+11
|
* Retain reference to blocking fibers.Samuel Williams2022-05-252-18/+22
|
* test/fiber/test_scheduler.rb: Remove the test file from $LOADED_FEATURESYusuke Endoh2022-05-091-0/+1
| | | | | | | | | | | | | to prevent the following failure on `make test-all --repeat-count=2` http://ci.rvm.jp/results/trunk-repeat20-asserts@phosphorus-docker/3957774 ``` 1) Error: TestFiberScheduler#test_autoload: NameError: uninitialized constant TestFiberSchedulerAutoload Object.const_get(:TestFiberSchedulerAutoload) ^^^^^^^^^^ ```
* Use a proper mutex for autoloading features. (#5788)Samuel Williams2022-05-082-0/+22
| | | | | | Object#autoload implements a custom per-thread "mutex" for blocking threads waiting on autoloading a feature. This causes problems when used with the fiber scheduler. We swap the implementation to use a Ruby mutex which is fiber aware.
* `rb_fiber_terminate` must not return [Bug #18497]Nobuyoshi Nakada2022-01-191-0/+15
| | | | | | | | In a forked process from a fiber, the fiber becomes the only fiber, `fiber_switch` does nothing as there is no other fibers, `rb_fiber_terminate` does not terminate the fiber. In that case, reaches the end of `fiber_entry` finaly, which is declared as "COROUTINE" and should never return.
* Use omit instead of skip without the default gems testsHiroshi SHIBATA2022-01-114-13/+13
|
* Improve interface for get/set/copy.Samuel Williams2021-12-211-2/+2
|
* test/fiber/test_io_buffer.rb: fix file descriptor leaksKazuki Yamaguchi2021-12-211-1/+12
| | | | | | | | | I got the warning while running "make test-all": Leaked file descriptor: TestFiberIOBuffer#test_write_nonblock: 9 : #<UNIXSocket:fd 9> Closed file descriptor: TestFiberIOBuffer#test_read_write_blocking: 9 Leaked file descriptor: TestFiberIOBuffer#test_timeout_after: 10 : #<UNIXSocket:fd 10> Closed file descriptor: TestFiberIOBuffer#test_read_nonblock: 10
* Introduce io_result wrapper for passing `[-errno, size]` in VALUE.Samuel Williams2021-12-183-0/+228
|
* Suppress the “experimental" warnings for `IO::Buffer`Nobuyoshi Nakada2021-11-231-0/+8
| | | | | As this warning is emitted just once per processes, needs in each files when parallel testing.
* Mark IO::Buffer as experimental.Samuel Williams2021-11-101-0/+1
|
* Add alternative optional hook for `scheduler_close` to allow public usage of ↵Samuel Williams2021-09-201-3/+15
| | | | close.
* Fix example fiber scheduler reg. writable eventsLars Kanis2021-08-262-1/+46
| | | | | | | | | | There were two issues: 1. When an IO object is waiting for writablility only (as in test_tcp_accept) the selected hash is empty. Therefore selected[fiber] returns nil but needs to default to 0 in order to be or'ed with IO::WRITABLE. 2. When an IO object is waiting for read- or writability (as in test_tcp_connect), but only one of these two events arrive, the Fiber and IO object need to be removed from the other `@readable` or `@writable` list.
* Fix potential hang when joining threads.Samuel Williams2021-08-032-2/+53
| | | | | | | | | | | If the thread termination invokes user code after `th->status` becomes `THREAD_KILLED`, and the user unblock function causes that `th->status` to become something else (e.g. `THREAD_RUNNING`), threads waiting in `thread_join_sleep` will hang forever. We move the unblock function call to before the thread status is updated, and allow threads to join as soon as `th->value` becomes defined. This reverts commit 6505c77501f1924571b2fe620c5c7b31ede0cd22.
* Revert "Fix potential hang when joining threads."Yusuke Endoh2021-07-282-28/+2
| | | | | | | | | | | This reverts commit 13f8521c630a15c87398dee0763e95f59c032a94. http://rubyci.s3.amazonaws.com/solaris11-gcc/ruby-master/log/20210727T230009Z.fail.html.gz http://rubyci.s3.amazonaws.com/solaris11-sunc/ruby-master/log/20210728T000009Z.fail.html.gz This revert is to confirm whether the commit is the cause. If the failures consistently occur after this revert, I'll reintroduce the commit.
* Fix potential hang when joining threads.Samuel Williams2021-07-272-2/+28
| | | | | | | | | If the thread termination invokes user code after `th->status` becomes `THREAD_KILLED`, and the user unblock function causes that `th->status` to become something else (e.g. `THREAD_RUNNING`), threads waiting in `thread_join_sleep` will hang forever. We move the unblock function call to before the thread status is updated, and allow threads to join as soon as `th->value` becomes defined.
* Prefer qualified names under ThreadNobuyoshi Nakada2021-06-292-13/+15
|
* Suppress exception report in inner threadNobuyoshi Nakada2021-06-151-1/+3
|
* Close leaked file descriptorsNobuyoshi Nakada2021-06-152-0/+5
|
* Fix fiber scheduler address resolve solaris testsBruno Sutic2021-06-141-5/+2
|
* Wake up join list within thread EC context. (#4471)Samuel Williams2021-06-144-2/+66
| | | | | | | | | | | | | | | * Wake up join list within thread EC context. * Consume items from join list so that they are not re-executed. If `rb_fiber_scheduler_unblock` raises an exception, it can result in a segfault if `rb_threadptr_join_list_wakeup` is not within a valid EC. This change moves `rb_threadptr_join_list_wakeup` into the thread's top level EC which initially caused an infinite loop because on exception will retry. We explicitly remove items from the thread's join list to avoid this situation. * Verify the required scheduler interface. * Test several scheduler hooks methods with broken `unblock` implementation.
* Add scheduler hook `Addrinfo.getaddrinfo`. (#4375)Samuel Williams2021-06-142-0/+287
| | | Co-authored-by: Bruno Sutic <code@brunosutic.com>
* Test incorrect behaviour of `rb_io_wait_readable/writable`.Samuel Williams2021-03-301-0/+35
|
* Fix handling of timeout accessing scheduler outside of non-blocking context.Samuel Williams2021-03-302-0/+18
|
* Improve timeout tests.Samuel Williams2021-03-301-1/+20
|
* Update method name and add documentation.Samuel Williams2021-03-302-2/+2
|
* Add hook for `Timeout.timeout`.Samuel Williams2021-03-302-4/+54
|
* Expose scheduler as public interface & bug fixes. (#3945)Samuel Williams2021-02-093-9/+71
| | | | | | | | | * Rename `rb_scheduler` to `rb_fiber_scheduler`. * Use public interface if available. * Use `rb_check_funcall` where possible. * Don't use `unblock` unless the fiber was non-blocking.
* Add verbose nil in testingDelton Ding2020-12-231-0/+1
|
* Enable `Fiber.current` and `Fiber#alive?` call inside ractorDelton Ding2020-12-231-0/+22
|
* Add support for non-blocking `Process.wait`.Samuel Williams2020-12-092-0/+43
|
* Fix TestFiberMutex#test_condition_variable assertionBenoit Daloze2020-11-081-5/+3
| | | | * Now that it works correctly.