27 Commits

Author SHA1 Message Date
Andrew Kelley
071607877d Io.EventLoop: select stub 2025-07-20 10:38:39 -07:00
Jacob Young
7b5886118d Io.Condition: implement full API 2025-07-20 10:38:39 -07:00
Jacob Young
fdf15fae97 EventLoop: implement detached fibers 2025-07-20 10:38:39 -07:00
Andrew Kelley
f2b24479ee EventLoop: let the allocator do its job
to bucket and free fiber allocations
2025-07-20 10:38:39 -07:00
Jacob Young
9a652cc42a EventLoop: fix std.Io.Condition implementation
1. a fiber can't put itself on a queue that allows it to be rescheduled
 2. allow the idle fiber to unlock a mutex held by another fiber by
    ignoring reschedule requests originating from the idle fiber
2025-07-20 10:38:39 -07:00
Jacob Young
f0919a4cea EventLoop: revert incorrect optimization 2025-07-20 10:38:39 -07:00
Andrew Kelley
fa937d686d EventLoop: remove broken mechanism for making deinit block on detached 2025-07-20 10:38:39 -07:00
Andrew Kelley
74969d1c40 std.Io.Condition: change primitive to support only one
and no timer
2025-07-20 10:38:39 -07:00
Andrew Kelley
59270425aa EventLoop: take DetachedClosure into account when allocating 2025-07-20 10:38:39 -07:00
Andrew Kelley
5aa3d1425e EventLoop: implement detached async
data races on deinit tho
2025-07-20 10:38:39 -07:00
Jacob Young
f3553049cb Io: implement faster mutex 2025-07-20 10:38:39 -07:00
Andrew Kelley
a7790bd32e implement Mutex, Condition, and Queue 2025-07-20 10:38:38 -07:00
Jacob Young
012ef81b8b Io: implement sleep and fix cancel bugs 2025-07-20 10:38:38 -07:00
Jacob Young
1fbc251ccd EventLoop: implement thread-local queues and cancellation 2025-07-20 10:38:38 -07:00
Andrew Kelley
988f58341b std.Io: introduce cancellation 2025-07-20 10:38:38 -07:00
Jacob Young
90cc7f4adf EventLoop: fix futex usage
How silly of me to forget that the kernel doesn't implement its own API.
The scheduling is not great, but at least doesn't deadlock or hammer.
2025-07-20 10:38:38 -07:00
Jacob Young
4f214b97ec EventLoop: get file operations working
Something is horribly wrong with scheduling, as can be seen in the
debug output, but at least it somehow manages to exit cleanly...
2025-07-20 10:38:38 -07:00
Andrew Kelley
50724cf1c3 WIP 2025-07-20 10:38:38 -07:00
Jacob Young
1216e807ac EventLoop: move context after the async closure
This avoids needing to store more sizes and alignments.  Only the result
alignment needs to be stored, because `Fiber` is at a fixed zero offset.
2025-07-20 10:38:38 -07:00
Jacob Young
048a40dac7 EventLoop: fix incorrect alignment panic
When the previous fiber did not request to be registered as an awaiter,
it may not have actually been a full blown `Fiber`, so only create the
`Fiber` pointer when needed.
2025-07-20 10:38:38 -07:00
Andrew Kelley
1d7a69cb7d update threaded fibers impl to actually storing args
sorry, something still not working correctly
2025-07-20 10:38:38 -07:00
Andrew Kelley
ad3c5f0292 fix context passing in threaded Io impl 2025-07-20 10:38:38 -07:00
Jacob Young
0c1f5dbd64 EventLoop: implement main idle fiber 2025-07-20 10:38:38 -07:00
Jacob Young
c7b406f2ad EventLoop: add threads 2025-07-20 10:38:38 -07:00
Jacob Young
03bb08d337 EventLoop: rewrite context switching 2025-07-20 10:38:38 -07:00
Jacob Young
93054125fe EventLoop: prepare for threading 2025-07-20 10:38:38 -07:00
Andrew Kelley
07ee4977da demo: single-threaded green threads implementation 2025-07-20 10:38:38 -07:00