-module(etui_run_ffi).
-export([with_cleanup/2]).
%% Runs Thunk, guaranteeing Cleanup executes on normal return and on any
%% exception (error, throw, or exit). On normal return the thunk's value is
%% propagated; on exception the cleanup runs and the exception re-raises.
%% This gives app.run its crash-restore semantics. Note: a hard erlang:halt
%% bypasses `after`, so abrupt aborts are covered separately by the watchdog
%% in etui_terminal_ffi.
with_cleanup(Thunk, Cleanup) ->
try
Thunk()
after
Cleanup()
end.