Merge branch 'master' into zig-0.15.0

This commit is contained in:
CJ van den Berg 2025-07-01 19:44:56 +02:00
commit b258b2bb54
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9
4 changed files with 1766 additions and 3 deletions

View file

@ -15,8 +15,8 @@
.hash = "dizzy-1.0.0-AAAAAM1wAAAiDbx_6RwcVEOBk8p2XOu8t9WPNc3K7kBK",
},
.thespian = .{
.url = "https://github.com/neurocyte/thespian/archive/a7b2354ad2fbe9d2b3629a455f2e823b463c18eb.tar.gz",
.hash = "thespian-0.0.1-owFOjosTBgAgvY4TcT_xI30QsbU8cE_tAUu_HoxoTjMV",
.url = "https://github.com/neurocyte/thespian/archive/829a8d33e92988a51a8c51d204ec766a28c7903d.tar.gz",
.hash = "thespian-0.0.1-owFOjs0TBgAAed7EtHDPtpB7NBn-riNjb7Rkc7a_Voow",
},
.themes = .{
.url = "https://github.com/neurocyte/flow-themes/releases/download/master-952f9f630ea9544088fd30293666ee0650b7a690/flow-themes.tar.gz",

View file

@ -149,7 +149,10 @@ pub fn main() anyerror!void {
}
if (builtin.os.tag != .windows)
if (std.posix.getenv("JITDEBUG")) |_| thespian.install_debugger();
if (std.posix.getenv("JITDEBUG")) |_|
thespian.install_debugger()
else if (@hasDecl(renderer, "install_crash_handler"))
renderer.install_crash_handler();
if (args.debug_wait) {
std.debug.print("press return to start", .{});

View file

@ -118,6 +118,34 @@ pub fn panic_in_progress() bool {
return in_panic.load(.acquire);
}
pub fn install_crash_handler() void {
if (!std.debug.have_segfault_handling_support) {
@compileError("segfault handler not supported for this target");
}
const act = std.posix.Sigaction{
.handler = .{ .sigaction = handle_crash },
.mask = std.posix.empty_sigset,
.flags = (std.posix.SA.SIGINFO | std.posix.SA.RESTART),
};
std.posix.sigaction(std.posix.SIG.BUS, &act, null);
std.posix.sigaction(std.posix.SIG.SEGV, &act, null);
std.posix.sigaction(std.posix.SIG.ABRT, &act, null);
std.posix.sigaction(std.posix.SIG.FPE, &act, null);
std.posix.sigaction(std.posix.SIG.ILL, &act, null);
}
fn handle_crash(sig: i32, info: *const std.posix.siginfo_t, ctx_ptr: ?*anyopaque) callconv(.c) noreturn {
in_panic.store(true, .release);
const cleanup = panic_cleanup;
panic_cleanup = null;
if (cleanup) |self| {
self.vx.deinit(self.allocator, self.tty.anyWriter());
self.tty.deinit();
}
@import("std/debug.zig").handleSegfaultPosix(sig, info, ctx_ptr);
}
pub fn run(self: *Self) Error!void {
self.vx.sgr = .legacy;
self.vx.conpty_hacks = true;

File diff suppressed because it is too large Load diff