diff options
| author | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 12:15:32 +0200 |
|---|---|---|
| committer | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 12:15:32 +0200 |
| commit | ba398cbb4cdb04ffadf2935a2bb536a1c5105400 (patch) | |
| tree | 9c103a95eb940308771eab1133794d1d6cd2fd3d /lua/clever_f/acquisition_service.lua | |
| parent | 7406476fa093b9af888e82d3cf5c1cc3b320a06f (diff) | |
Make temporary releases idempotent
Diffstat (limited to 'lua/clever_f/acquisition_service.lua')
| -rw-r--r-- | lua/clever_f/acquisition_service.lua | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/lua/clever_f/acquisition_service.lua b/lua/clever_f/acquisition_service.lua index a19f8f8..5cbe6ab 100644 --- a/lua/clever_f/acquisition_service.lua +++ b/lua/clever_f/acquisition_service.lua @@ -321,23 +321,47 @@ function TemporaryResourceScope:release() if record == nil then fail("temporary resource scope is invalid", 2) end + if not record.active then + return false + end + record.active = false + + local first_error + local function release_operation(operation) + local ok, failure = pcall(operation) + if not ok and first_error == nil then + first_error = failure + end + end + if record.interactive and record.prompt_shown and record.input_completed and record.acquisition_completed then - record.host:redraw("full") + release_operation(function() + record.host:redraw("full") + end) end if record.direct_marker ~= nil then - record.feedback:remove_temporary_overlay(record.direct_marker) + release_operation(function() + record.feedback:remove_temporary_overlay(record.direct_marker) + end) end if record.cursor_marker ~= nil then - record.feedback:remove_temporary_overlay(record.cursor_marker) + release_operation(function() + record.feedback:remove_temporary_overlay(record.cursor_marker) + end) end if record.cursor_presentation_lease ~= nil then - record.cursor_presentation_lease:release() + release_operation(function() + record.cursor_presentation_lease:release() + end) end - record.active = false + if first_error ~= nil then + error(first_error, 0) + end + return true end local function require_policy(service, host) |
