From f4235ebc91a38ba4fe8ad2256b4f0305d1a9e602 Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Thu, 15 Dec 2022 21:22:36 -0500 Subject: [PATCH 1/2] vere: handle ctrl-z like ctrl-c in play command --- pkg/urbit/daemon/main.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/pkg/urbit/daemon/main.c b/pkg/urbit/daemon/main.c index f5c29f9098..19e8697f1b 100644 --- a/pkg/urbit/daemon/main.c +++ b/pkg/urbit/daemon/main.c @@ -1780,6 +1780,17 @@ _cw_play_slog(u3_noun hod) u3z(hod); } +/* _cw_play_exit(): exit immediately. +*/ +static void +_cw_play_exit(c3_i int_i) +{ + // explicit fprintf to avoid allocation in u3l_log + // + fprintf(stderr, "\r\n[received keyboard stop signal, exiting]\r\n"); + raise(SIGINT); +} + /* _cw_play(): replay events, but better. */ static void @@ -1859,10 +1870,16 @@ _cw_play(c3_i argc, c3_c* argv[]) exit(1); } - // XX handle SIGTSTP so that the lockfile is not orphaned? - // u3_disk* log_u = _cw_disk_init(u3_Host.dir_c); // XX s/b try_aquire lock +#if !defined(U3_OS_mingw) + // Handle SIGTSTP as if it was SIGINT. + // + // Configured here using signal() so as to be immediately available. + // + signal(SIGTSTP, _cw_play_exit); +#endif + if ( c3y == mel_o ) { u3C.wag_w |= u3o_auto_meld; } From f7fd944e0235aeac4721f29ed0f247df29cfe600 Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Thu, 15 Dec 2022 21:22:54 -0500 Subject: [PATCH 2/2] mars: cleanup event log on exit --- pkg/urbit/worker/mars.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/urbit/worker/mars.c b/pkg/urbit/worker/mars.c index 9a3e59ab8a..9e38844ccb 100644 --- a/pkg/urbit/worker/mars.c +++ b/pkg/urbit/worker/mars.c @@ -174,7 +174,7 @@ u3_mars_play(u3_mars* mar_u, c3_d eve_d) fprintf(stderr, "mars: boot fail\r\n"); // XX exit code, cb // - exit(1);; + exit(1); } mar_u->sen_d = mar_u->dun_d = lif_w; @@ -231,6 +231,7 @@ u3_mars_play(u3_mars* mar_u, c3_d eve_d) // XX check loom size, suggest --loom X // XX exit code, cb // + u3_disk_exit(log_u); exit(1); } @@ -254,6 +255,7 @@ u3_mars_play(u3_mars* mar_u, c3_d eve_d) u3m_save(); // XX exit code, cb // + u3_disk_exit(log_u); exit(1); } }