diff options
| author | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 17:51:24 +0200 |
|---|---|---|
| committer | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 17:51:24 +0200 |
| commit | 0ff6af88a8b955606312c9e4d4929057b9067826 (patch) | |
| tree | 499f0ca5bea709d6ded9ec15e00844c750d634b3 /lua | |
| parent | fae69149ec18b2f75e124976623fc99ee3cb090a (diff) | |
Roll back feedback when finalizer setup fails
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/clever_f/feedback_service.lua | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/lua/clever_f/feedback_service.lua b/lua/clever_f/feedback_service.lua index 492d4a6..ca26746 100644 --- a/lua/clever_f/feedback_service.lua +++ b/lua/clever_f/feedback_service.lua @@ -622,12 +622,28 @@ local function materialize_persistent(service, request) }) request.group = "CleverFChar" request.priority = M.overlay_priority("CleverFChar") - record.transitions:AddTargetOverlay( - request.identity, - request.window, - request.anchor.line - ) - request.finalizers = register_finalizers(service, record) + local owned, ownership_error = pcall(function() + record.transitions:AddTargetOverlay( + request.identity, + request.window, + request.anchor.line + ) + request.finalizers = register_finalizers(service, record) + end) + if not owned then + local resources = record.transitions:RemoveTargetOverlay( + request.identity, + request.window + ) + if #resources == 0 then + resources[1] = { + identity = request.identity, + window = request.window, + } + end + pcall(release_target_overlays, record, resources) + error(ownership_error, 0) + end local requests = record.persistent_requests requests[#requests + 1] = request return request |
