diff options
| author | Jonas Maier <> | 2026-03-05 17:37:52 +0100 |
|---|---|---|
| committer | Jonas Maier <> | 2026-03-05 17:37:52 +0100 |
| commit | 07c802b93a241d566161d3077b3254df4067fa1e (patch) | |
| tree | ebe370181c9660d3b6657d2de12e5adc3b884946 /src/run/builtin.rs | |
| parent | f919c3e5d10db7afe41a14b94b99cd38e44d2720 (diff) | |
| download | pish-07c802b93a241d566161d3077b3254df4067fa1e.tar.gz | |
lots of shenanigans to have proper execve reload
Diffstat (limited to 'src/run/builtin.rs')
| -rw-r--r-- | src/run/builtin.rs | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs index 0f90e51..da6f4f2 100644 --- a/src/run/builtin.rs +++ b/src/run/builtin.rs @@ -43,9 +43,13 @@ impl Builtin for re { session.raw.disable(); match Command::new("cargo").arg("build").status() { Ok(status) if status.success() => { - let _ = Command::new("cargo").arg("run").status(); - session.raw.disable(); - std::process::exit(0); + // build of new shell succeeded + + // unwind the entire stack intentionally to free resources + // the catch handler will check the boolean and execve into + // the new executable + super::RELOAD.store(true, std::sync::atomic::Ordering::SeqCst); + std::panic::resume_unwind(Box::new(42)); } _ => (), } |
