diff options
Diffstat (limited to 'src/nvim/msgpack_rpc/unpacker.c')
-rw-r--r-- | src/nvim/msgpack_rpc/unpacker.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/src/nvim/msgpack_rpc/unpacker.c b/src/nvim/msgpack_rpc/unpacker.c index dbb30b0c9a..28d27e8268 100644 --- a/src/nvim/msgpack_rpc/unpacker.c +++ b/src/nvim/msgpack_rpc/unpacker.c @@ -187,6 +187,8 @@ void unpacker_init(Unpacker *p) p->unpack_error = ERROR_INIT; p->arena = (Arena)ARENA_EMPTY; + + p->has_grid_line_event = false; } void unpacker_teardown(Unpacker *p) @@ -303,6 +305,7 @@ error: bool unpacker_advance(Unpacker *p) { assert(p->state >= 0); + p->has_grid_line_event = false; if (p->state == 0) { if (!unpacker_parse_header(p)) { return false; @@ -323,6 +326,7 @@ bool unpacker_advance(Unpacker *p) if (p->state == 16) { // grid_line event already unpacked + p->has_grid_line_event = true; goto done; } else { assert(p->state == 12); @@ -378,7 +382,7 @@ bool unpacker_parse_redraw(Unpacker *p) const char *data = p->read_ptr; size_t size = p->read_size; - GridLineEvent *g = p->grid_line_event; + GridLineEvent *g = &p->grid_line_event; #define NEXT_TYPE(tok, typ) \ result = mpack_rtoken(&data, &size, &tok); \ @@ -420,16 +424,10 @@ bool unpacker_parse_redraw(Unpacker *p) p->read_size = size; if (p->ui_handler.fn != ui_client_event_grid_line) { p->state = 12; - if (p->grid_line_event) { - arena_mem_free(arena_finish(&p->arena)); - p->grid_line_event = NULL; - } return true; } else { p->state = 14; p->arena = (Arena)ARENA_EMPTY; - p->grid_line_event = arena_alloc(&p->arena, sizeof *p->grid_line_event, true); - g = p->grid_line_event; } FALLTHROUGH; |