Commit a45a4230bc

Loris Cro <kappaloris@gmail.com>
2020-09-29 11:18:35
Fix std.event.Future
Signed-off-by: Loris Cro <kappaloris@gmail.com>
1 parent a0c0f9e
Changed files (2)
lib
lib/std/event/future.zig
@@ -95,7 +95,7 @@ test "std.event.Future" {
     // TODO provide a way to run tests in evented I/O mode
     if (!std.io.is_async) return error.SkipZigTest;
 
-    const handle = async testFuture();
+    testFuture();
 }
 
 fn testFuture() void {
lib/std/event/lock.zig
@@ -27,20 +27,24 @@ pub const Lock = struct {
 
     const Waiter = struct {
         // forced Waiter alignment to ensure it doesn't clash with LOCKED
-        next: ?*Waiter align(2), 
+        next: ?*Waiter align(2),
         tail: *Waiter,
         node: Loop.NextTickNode,
     };
 
+    pub fn initLocked() Lock {
+        return Lock{ .head = LOCKED };
+    }
+
     pub fn acquire(self: *Lock) Held {
         const held = self.mutex.acquire();
 
         // self.head transitions from multiple stages depending on the value:
-        // UNLOCKED -> LOCKED: 
+        // UNLOCKED -> LOCKED:
         //   acquire Lock ownership when theres no waiters
         // LOCKED -> <Waiter head ptr>:
         //   Lock is already owned, enqueue first Waiter
-        // <head ptr> -> <head ptr>: 
+        // <head ptr> -> <head ptr>:
         //   Lock is owned with pending waiters. Push our waiter to the queue.
 
         if (self.head == UNLOCKED) {
@@ -51,7 +55,7 @@ pub const Lock = struct {
 
         var waiter: Waiter = undefined;
         waiter.next = null;
-        waiter.tail = &waiter; 
+        waiter.tail = &waiter;
 
         const head = switch (self.head) {
             UNLOCKED => unreachable,
@@ -79,15 +83,15 @@ pub const Lock = struct {
     }
 
     pub const Held = struct {
-        lock: *Lock, 
-    
+        lock: *Lock,
+
         pub fn release(self: Held) void {
             const waiter = blk: {
                 const held = self.lock.mutex.acquire();
                 defer held.release();
 
                 // self.head goes through the reverse transition from acquire():
-                // <head ptr> -> <new head ptr>: 
+                // <head ptr> -> <new head ptr>:
                 //   pop a waiter from the queue to give Lock ownership when theres still others pending
                 // <head ptr> -> LOCKED:
                 //   pop the laster waiter from the queue, while also giving it lock ownership when awaken