From b1f9f68e87a4a29c42e21e3c1ffaaf1eff0b927a Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 21 Apr 2022 15:57:45 -0700 Subject: [PATCH] libuv: Sem --- src/libuv/Sem.zig | 35 +++++++++++++++++++++++++++++++++++ src/libuv/main.zig | 2 ++ 2 files changed, 37 insertions(+) create mode 100644 src/libuv/Sem.zig diff --git a/src/libuv/Sem.zig b/src/libuv/Sem.zig new file mode 100644 index 000000000..89bfc6d97 --- /dev/null +++ b/src/libuv/Sem.zig @@ -0,0 +1,35 @@ +//! Semaphores implemented via libuv. +const Sem = @This(); + +const std = @import("std"); +const Allocator = std.mem.Allocator; +const testing = std.testing; +const c = @import("c.zig"); +const errors = @import("error.zig"); + +sem: *c.uv_sem_t, + +pub fn init(alloc: Allocator, value: u32) !Sem { + const sem = try alloc.create(c.uv_sem_t); + try errors.convertError(c.uv_sem_init(sem, value)); + return Sem{ .sem = sem }; +} + +pub fn deinit(self: *Sem, alloc: Allocator) void { + c.uv_sem_destroy(self.sem); + alloc.destroy(self.sem); + self.* = undefined; +} + +pub fn post(self: Sem) void { + c.uv_sem_post(self.sem); +} + +pub fn wait(self: Sem) void { + c.uv_sem_wait(self.sem); +} + +test { + var sem = try init(testing.allocator, 0); + defer sem.deinit(testing.allocator); +} diff --git a/src/libuv/main.zig b/src/libuv/main.zig index d012ab5d3..a3ee6774a 100644 --- a/src/libuv/main.zig +++ b/src/libuv/main.zig @@ -1,7 +1,9 @@ const Loop = @import("Loop.zig"); +const Sem = @import("Sem.zig"); const Error = @import("error.zig").Error; test { _ = Loop; + _ = Sem; _ = Error; }