summaryrefslogtreecommitdiff
path: root/lua/clever_f
diff options
context:
space:
mode:
Diffstat (limited to 'lua/clever_f')
-rw-r--r--lua/clever_f/feedback_service.lua28
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