23 Commits

Author SHA1 Message Date
Jacob Young
c8950b5dd5 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-10-02 16:30:59 -07:00
Jacob Young
5952fc2c73 EventLoop: revert incorrect optimization 2025-10-02 16:30:59 -07:00
Andrew Kelley
34e85db4a2 EventLoop: remove broken mechanism for making deinit block on detached 2025-10-02 16:30:59 -07:00
Andrew Kelley
e5b2df0c9b std.Io.Condition: change primitive to support only one
and no timer
2025-10-02 16:30:59 -07:00
Andrew Kelley
63b3a3d11c EventLoop: take DetachedClosure into account when allocating 2025-10-02 16:30:59 -07:00
Andrew Kelley
663611773c EventLoop: implement detached async
data races on deinit tho
2025-10-02 16:30:59 -07:00
Jacob Young
0f083f24ff Io: implement faster mutex 2025-10-02 16:30:59 -07:00
Andrew Kelley
5508b4c887 implement Mutex, Condition, and Queue 2025-10-02 16:30:59 -07:00
Jacob Young
b01244d225 Io: implement sleep and fix cancel bugs 2025-10-02 16:30:59 -07:00
Jacob Young
b37126bc08 EventLoop: implement thread-local queues and cancellation 2025-10-02 16:30:59 -07:00
Andrew Kelley
c278830592 std.Io: introduce cancellation 2025-10-02 16:30:59 -07:00
Jacob Young
708bac1a57 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-10-02 16:30:59 -07:00
Jacob Young
507f973b5e 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-10-02 16:30:59 -07:00
Andrew Kelley
b215ddc9fb WIP 2025-10-02 16:30:59 -07:00
Jacob Young
2f2019645c 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-10-02 16:30:59 -07:00
Jacob Young
dfbf68e5fa 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-10-02 16:30:59 -07:00
Andrew Kelley
3ee2399630 update threaded fibers impl to actually storing args
sorry, something still not working correctly
2025-10-02 16:30:59 -07:00
Andrew Kelley
acd02e978b fix context passing in threaded Io impl 2025-10-02 16:30:59 -07:00
Jacob Young
1e79f2c12f EventLoop: implement main idle fiber 2025-10-02 16:30:59 -07:00
Jacob Young
2c1ceb4c9c EventLoop: add threads 2025-10-02 16:30:59 -07:00
Jacob Young
19e7613a2d EventLoop: rewrite context switching 2025-10-02 16:30:59 -07:00
Jacob Young
a9723598d7 EventLoop: prepare for threading 2025-10-02 16:30:59 -07:00
Andrew Kelley
1e09d7f499 demo: single-threaded green threads implementation 2025-10-02 16:30:59 -07:00