mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-12-29 17:44:49 +00:00
Multiple fixes to prevent file descriptor leaks: - libxev eventfd now uses CLOEXEC - linux: cgroup clone now uses CLOEXEC for the cgroup fd - termio pipe uses pipe2 with CLOEXEC - pty master always sets CLOEXEC because the child doesn't need it - termio exec now closes pty slave fd after fork There still appear to be some fd leaks happening. They seem related to GTK, they aren't things we're accessig directly. I still want to investigate them but this at least cleans up the major sources of fd leakage.
22 lines
718 B
Zig
22 lines
718 B
Zig
const std = @import("std");
|
|
const builtin = @import("builtin");
|
|
const windows = @import("windows.zig");
|
|
const posix = std.posix;
|
|
|
|
/// pipe() that works on Windows and POSIX. For POSIX systems, this sets
|
|
/// CLOEXEC on the file descriptors.
|
|
pub fn pipe() ![2]posix.fd_t {
|
|
switch (builtin.os.tag) {
|
|
else => return try posix.pipe2(.{ .CLOEXEC = true }),
|
|
.windows => {
|
|
var read: windows.HANDLE = undefined;
|
|
var write: windows.HANDLE = undefined;
|
|
if (windows.exp.kernel32.CreatePipe(&read, &write, null, 0) == 0) {
|
|
return windows.unexpectedError(windows.kernel32.GetLastError());
|
|
}
|
|
|
|
return .{ read, write };
|
|
},
|
|
}
|
|
}
|