From 0ff6af88a8b955606312c9e4d4929057b9067826 Mon Sep 17 00:00:00 2001 From: Jackson Moore Date: Fri, 4 Sep 2026 17:51:24 +0200 Subject: Roll back feedback when finalizer setup fails --- lua/clever_f/feedback_service.lua | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'lua/clever_f') 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 -- cgit v1.2.3