aboutsummaryrefslogtreecommitdiff
path: root/std/event/loop.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2018-11-27 21:06:35 -0500
committerAndrew Kelley <andrew@ziglang.org>2018-11-27 21:06:35 -0500
commit57f44eb2bd17fc0c4e9d09b8c8621867f784d2f0 (patch)
tree51f46cdc8f8ea0f4e642d62b3bf8fce58034362e /std/event/loop.zig
parent1fb15be05f1037aad53d2db32d13123363365d10 (diff)
parentdd2450b1b21809c3fe62920498c318fbe519f579 (diff)
downloadzig-57f44eb2bd17fc0c4e9d09b8c8621867f784d2f0.tar.gz
zig-57f44eb2bd17fc0c4e9d09b8c8621867f784d2f0.zip
Merge branch 'freebsd2'
Tier 2 support for FreeBSD
Diffstat (limited to 'std/event/loop.zig')
-rw-r--r--std/event/loop.zig27
1 files changed, 14 insertions, 13 deletions
diff --git a/std/event/loop.zig b/std/event/loop.zig
index fb47a9f253..43965e8293 100644
--- a/std/event/loop.zig
+++ b/std/event/loop.zig
@@ -49,7 +49,7 @@ pub const Loop = struct {
};
pub const EventFd = switch (builtin.os) {
- builtin.Os.macosx => MacOsEventFd,
+ builtin.Os.macosx, builtin.Os.freebsd => KEventFd,
builtin.Os.linux => struct {
base: ResumeNode,
epoll_op: u32,
@@ -62,13 +62,13 @@ pub const Loop = struct {
else => @compileError("unsupported OS"),
};
- const MacOsEventFd = struct {
+ const KEventFd = struct {
base: ResumeNode,
kevent: posix.Kevent,
};
pub const Basic = switch (builtin.os) {
- builtin.Os.macosx => MacOsBasic,
+ builtin.Os.macosx, builtin.Os.freebsd => KEventBasic,
builtin.Os.linux => struct {
base: ResumeNode,
},
@@ -78,7 +78,7 @@ pub const Loop = struct {
else => @compileError("unsupported OS"),
};
- const MacOsBasic = struct {
+ const KEventBasic = struct {
base: ResumeNode,
kev: posix.Kevent,
};
@@ -214,7 +214,7 @@ pub const Loop = struct {
self.extra_threads[extra_thread_index] = try os.spawnThread(self, workerRun);
}
},
- builtin.Os.macosx => {
+ builtin.Os.macosx, builtin.Os.freebsd => {
self.os_data.kqfd = try os.bsdKQueue();
errdefer os.close(self.os_data.kqfd);
@@ -369,7 +369,7 @@ pub const Loop = struct {
os.close(self.os_data.epollfd);
self.allocator.free(self.eventfd_resume_nodes);
},
- builtin.Os.macosx => {
+ builtin.Os.macosx, builtin.Os.freebsd => {
os.close(self.os_data.kqfd);
os.close(self.os_data.fs_kqfd);
},
@@ -484,7 +484,7 @@ pub const Loop = struct {
const eventfd_node = &resume_stack_node.data;
eventfd_node.base.handle = next_tick_node.data;
switch (builtin.os) {
- builtin.Os.macosx => {
+ builtin.Os.macosx, builtin.Os.freebsd => {
const kevent_array = (*[1]posix.Kevent)(&eventfd_node.kevent);
const empty_kevs = ([*]posix.Kevent)(undefined)[0..0];
_ = os.bsdKEvent(self.os_data.kqfd, kevent_array, empty_kevs, null) catch {
@@ -546,6 +546,7 @@ pub const Loop = struct {
switch (builtin.os) {
builtin.Os.linux,
builtin.Os.macosx,
+ builtin.Os.freebsd,
=> self.os_data.fs_thread.wait(),
else => {},
}
@@ -610,7 +611,7 @@ pub const Loop = struct {
os.posixWrite(self.os_data.final_eventfd, wakeup_bytes) catch unreachable;
return;
},
- builtin.Os.macosx => {
+ builtin.Os.macosx, builtin.Os.freebsd => {
self.posixFsRequest(&self.os_data.fs_end_request);
const final_kevent = (*[1]posix.Kevent)(&self.os_data.final_kevent);
const empty_kevs = ([*]posix.Kevent)(undefined)[0..0];
@@ -668,7 +669,7 @@ pub const Loop = struct {
}
}
},
- builtin.Os.macosx => {
+ builtin.Os.macosx, builtin.Os.freebsd => {
var eventlist: [1]posix.Kevent = undefined;
const empty_kevs = ([*]posix.Kevent)(undefined)[0..0];
const count = os.bsdKEvent(self.os_data.kqfd, empty_kevs, eventlist[0..], null) catch unreachable;
@@ -731,7 +732,7 @@ pub const Loop = struct {
self.beginOneEvent(); // finished in posixFsRun after processing the msg
self.os_data.fs_queue.put(request_node);
switch (builtin.os) {
- builtin.Os.macosx => {
+ builtin.Os.macosx, builtin.Os.freebsd => {
const fs_kevs = (*[1]posix.Kevent)(&self.os_data.fs_kevent_wake);
const empty_kevs = ([*]posix.Kevent)(undefined)[0..0];
_ = os.bsdKEvent(self.os_data.fs_kqfd, fs_kevs, empty_kevs, null) catch unreachable;
@@ -801,7 +802,7 @@ pub const Loop = struct {
else => unreachable,
}
},
- builtin.Os.macosx => {
+ builtin.Os.macosx, builtin.Os.freebsd => {
const fs_kevs = (*[1]posix.Kevent)(&self.os_data.fs_kevent_wait);
var out_kevs: [1]posix.Kevent = undefined;
_ = os.bsdKEvent(self.os_data.fs_kqfd, fs_kevs, out_kevs[0..], null) catch unreachable;
@@ -813,7 +814,7 @@ pub const Loop = struct {
const OsData = switch (builtin.os) {
builtin.Os.linux => LinuxOsData,
- builtin.Os.macosx => MacOsData,
+ builtin.Os.macosx, builtin.Os.freebsd => KEventData,
builtin.Os.windows => struct {
io_port: windows.HANDLE,
extra_thread_count: usize,
@@ -821,7 +822,7 @@ pub const Loop = struct {
else => struct {},
};
- const MacOsData = struct {
+ const KEventData = struct {
kqfd: i32,
final_kevent: posix.Kevent,
fs_kevent_wake: posix.Kevent,