mirror of
https://github.com/neovim/neovim.git
synced 2025-09-16 08:18:17 +00:00
luaref: free all references in buffer_updates
This commit is contained in:
@@ -222,11 +222,7 @@ Boolean nvim_buf_attach(uint64_t channel_id,
|
|||||||
return buf_updates_register(buf, channel_id, cb, send_buffer);
|
return buf_updates_register(buf, channel_id, cb, send_buffer);
|
||||||
|
|
||||||
error:
|
error:
|
||||||
// TODO(bfredl): ASAN build should check that the ref table is empty?
|
buffer_update_callbacks_free(cb);
|
||||||
api_free_luaref(cb.on_lines);
|
|
||||||
api_free_luaref(cb.on_bytes);
|
|
||||||
api_free_luaref(cb.on_changedtick);
|
|
||||||
api_free_luaref(cb.on_detach);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -176,7 +176,7 @@ void buf_updates_unload(buf_T *buf, bool can_reload)
|
|||||||
if (keep) {
|
if (keep) {
|
||||||
kv_A(buf->update_callbacks, j++) = kv_A(buf->update_callbacks, i);
|
kv_A(buf->update_callbacks, j++) = kv_A(buf->update_callbacks, i);
|
||||||
} else {
|
} else {
|
||||||
free_update_callbacks(cb);
|
buffer_update_callbacks_free(cb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
kv_size(buf->update_callbacks) = j;
|
kv_size(buf->update_callbacks) = j;
|
||||||
@@ -290,7 +290,7 @@ void buf_updates_send_changes(buf_T *buf,
|
|||||||
textlock--;
|
textlock--;
|
||||||
|
|
||||||
if (res.type == kObjectTypeBoolean && res.data.boolean == true) {
|
if (res.type == kObjectTypeBoolean && res.data.boolean == true) {
|
||||||
free_update_callbacks(cb);
|
buffer_update_callbacks_free(cb);
|
||||||
keep = false;
|
keep = false;
|
||||||
}
|
}
|
||||||
api_free_object(res);
|
api_free_object(res);
|
||||||
@@ -342,7 +342,7 @@ void buf_updates_send_splice(
|
|||||||
textlock--;
|
textlock--;
|
||||||
|
|
||||||
if (res.type == kObjectTypeBoolean && res.data.boolean == true) {
|
if (res.type == kObjectTypeBoolean && res.data.boolean == true) {
|
||||||
free_update_callbacks(cb);
|
buffer_update_callbacks_free(cb);
|
||||||
keep = false;
|
keep = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -378,7 +378,7 @@ void buf_updates_changedtick(buf_T *buf)
|
|||||||
textlock--;
|
textlock--;
|
||||||
|
|
||||||
if (res.type == kObjectTypeBoolean && res.data.boolean == true) {
|
if (res.type == kObjectTypeBoolean && res.data.boolean == true) {
|
||||||
free_update_callbacks(cb);
|
buffer_update_callbacks_free(cb);
|
||||||
keep = false;
|
keep = false;
|
||||||
}
|
}
|
||||||
api_free_object(res);
|
api_free_object(res);
|
||||||
@@ -406,8 +406,11 @@ void buf_updates_changedtick_single(buf_T *buf, uint64_t channel_id)
|
|||||||
rpc_send_event(channel_id, "nvim_buf_changedtick_event", args);
|
rpc_send_event(channel_id, "nvim_buf_changedtick_event", args);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void free_update_callbacks(BufUpdateCallbacks cb)
|
void buffer_update_callbacks_free(BufUpdateCallbacks cb)
|
||||||
{
|
{
|
||||||
api_free_luaref(cb.on_lines);
|
api_free_luaref(cb.on_lines);
|
||||||
|
api_free_luaref(cb.on_bytes);
|
||||||
api_free_luaref(cb.on_changedtick);
|
api_free_luaref(cb.on_changedtick);
|
||||||
|
api_free_luaref(cb.on_reload);
|
||||||
|
api_free_luaref(cb.on_detach);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user