Граф коммитов

41 Коммитов

Автор SHA1 Сообщение Дата
Samuel Williams 04729fe68d
Fix exception handling in `rb_fiber_scheduler_set`. (#10042) 2024-02-22 00:33:18 +13:00
kudojp 0e49f8173a [DOC] Fix method docs of scheduler#io_read and scheduler#io_write
Each of Fiber::Scheduler#io_read and io_write takes the "offset" as the fourth argument, which is not doucmented.
2023-09-10 19:39:28 +09:00
Samuel Williams 648870b5c5
Support `IO#pread` / `IO#pwrite` using fiber scheduler. (#7594)
* Skip test if non-blocking file IO is not supported.
2023-03-31 00:48:55 +13:00
Samuel Williams 466aa8010f
Fix incorrect usage of `rb_fiber_scheduler_io_(p)(read|write)`. (#7593) 2023-03-25 18:36:27 +13:00
Victor Shepelev c3c116f6a6
[DOC] Document new methods of IO::Buffer and Fiber::Scheduler (#7016)
Co-authored-by: Samuel Williams <samuel.williams@oriontransfer.co.nz>
2022-12-24 11:48:58 +13:00
S-H-GAMELINKS 1f4f6c9832 Using UNDEF_P macro 2022-11-16 18:58:33 +09:00
Samuel Williams 7fcad1fa03
Update `Fiber::Scheduler` documentation. (#6562) 2022-10-15 21:43:45 +13:00
Samuel Williams 8a420670a2
Introduce `Fiber::Scheduler#io_select` hook for non-blocking `IO.select`. (#6559) 2022-10-15 19:59:04 +13:00
Samuel Williams ced1d17280
Improvements to IO::Buffer implementation and documentation. (#6525) 2022-10-12 12:59:05 +13:00
Samuel Williams e4f91bbdba
Add IO#timeout attribute and use it for blocking IO operations. (#5653) 2022-10-07 21:48:38 +13:00
Nobuyoshi Nakada e2ccb316b4 [Bug #5317] Use `rb_off_t` instead of `off_t`
Get rid of the conflict with system-provided small `off_t`.
2022-09-08 23:01:07 +09:00
Samuel Williams bed920f073
Add fiber scheduler hooks for `pread`/`pwrite`, and add support to `IO::Buffer`. 2021-12-23 12:20:09 +13:00
Samuel Williams 617687df09 Rename IMMUTABLE to READONLY. 2021-12-21 12:25:42 +13:00
Samuel Williams 56811617ab Improve IO::Buffer resize and introduce ownership transfer. 2021-12-20 00:17:17 +13:00
Samuel Williams 4b89034218 IO::Buffer for scheduler interface. 2021-11-10 19:21:05 +13:00
Samuel Williams b61064b821 Add gvl and fiber assertions to scheduler interface to catch invalid usage. 2021-09-20 23:16:45 +12:00
Samuel Williams cb8434563d Add alternative optional hook for `scheduler_close` to allow public usage of close. 2021-09-20 22:07:58 +12:00
Nobuyoshi Nakada e4f891ce8d
Adjust styles [ci skip]
* --braces-after-func-def-line
* --dont-cuddle-else
* --procnames-start-lines
* --space-after-for
* --space-after-if
* --space-after-while
2021-06-17 10:13:40 +09:00
Nobuyoshi Nakada b513fc2fe7
Fixed method names in exception messages
These methods are not !-suffixed, and the messages were very
confusing.
2021-06-14 21:16:43 +09:00
Samuel Williams 050a895439
Wake up join list within thread EC context. (#4471)
* 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.
2021-06-14 17:56:53 +12:00
Samuel Williams 2792acc8f2
Add scheduler hook `Addrinfo.getaddrinfo`. (#4375)
Co-authored-by: Bruno Sutic <code@brunosutic.com>
2021-06-14 16:21:08 +12:00
Samuel Williams 3d32c21758 Disable public interface for now. 2021-03-30 18:38:42 +13:00
Samuel Williams 511acba4ae Update method name and add documentation. 2021-03-30 18:38:42 +13:00
Samuel Williams 09c865d541 Fix native implementation.
# Conflicts:
#	scheduler.c
2021-03-30 18:38:42 +13:00
Nobuyoshi Nakada 67f60ebb64 Fixed a compilation error 2021-03-30 18:38:42 +13:00
Samuel Williams c05dd7dc85 Prefer `rb_check_funcall`. 2021-03-30 18:38:42 +13:00
Samuel Williams 4c53dc970b Add hook for `Timeout.timeout`. 2021-03-30 18:38:42 +13:00
Nobuyoshi Nakada 8776606b1d
strip trailing spaces [ci skip] 2021-02-09 16:59:15 +09:00
Samuel Williams 5f69a7f604
Expose scheduler as public interface & bug fixes. (#3945)
* 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.
2021-02-09 19:39:56 +13:00
Samuel Williams 2553c5f94a Add support for non-blocking `Process.wait`. 2020-12-09 08:55:35 +13:00
Nobuyoshi Nakada d2b7e1e4b2
Protoized old pre-ANSI K&R style definitions 2020-12-05 14:57:31 +09:00
Samuel Williams a08ee8330d Rename to `Fiber#set_scheduler`. 2020-11-07 23:39:50 +13:00
Nobuyoshi Nakada 257007af9a
Added a fallback return 2020-10-01 13:46:13 +09:00
Nobuyoshi Nakada 0e98a9c854
break around function definition [ci skip] 2020-10-01 13:44:29 +09:00
Samuel Williams 13660105e2 Don't call `Scheduler#close` if it doesn't exist. 2020-10-01 16:02:03 +13:00
Samuel Williams 70f08f1eed Make `Thread#join` non-blocking. 2020-09-21 11:48:44 +12:00
Samuel Williams 501fff14c7 When setting current thread scheduler to nil, invoke `#close`. 2020-09-21 09:51:33 +12:00
Benoit Daloze 738a089b3a Rename scheduler.{mutex_lock,mutex_unlock} to {block,unblock}
* Move #kernel_sleep next to #block as it is similar
2020-09-17 14:30:40 +02:00
Benoit Daloze 178c1b0922 Make Mutex per-Fiber instead of per-Thread
* Enables Mutex to be used as synchronization between multiple Fibers
  of the same Thread.
* With a Fiber scheduler we can yield to another Fiber on contended
  Mutex#lock instead of blocking the entire thread.
* This also makes the behavior of Mutex consistent across CRuby, JRuby and TruffleRuby.
* [Feature #16792]
2020-09-14 16:44:09 +12:00
Samuel Williams 701dcbb3ca Add support for hooking `IO#read`. 2020-09-14 16:44:09 +12:00
Samuel Williams d387029f39 Standardised scheduler interface. 2020-09-14 16:44:09 +12:00