luaref: free all references in buffer_updates

This commit is contained in:
Björn Linse
2021-03-27 11:07:55 +01:00
parent eae4b1e5c2
commit a0b7bb4153
2 changed files with 9 additions and 10 deletions

View File

@@ -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;
} }

View File

@@ -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);
} }