aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/os/channel.c
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-05-27 09:12:53 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-05-28 08:52:54 -0300
commit09bcd97023e68943a82995f8f13cf0c984a9bb5f (patch)
tree7867fba0b2af4ce4d9ea1a726c4319756afa8aeb /src/nvim/os/channel.c
parent1c308e28f1b52682034b97e89f2b3e76fb3c913f (diff)
downloadrneovim-09bcd97023e68943a82995f8f13cf0c984a9bb5f.tar.gz
rneovim-09bcd97023e68943a82995f8f13cf0c984a9bb5f.tar.bz2
rneovim-09bcd97023e68943a82995f8f13cf0c984a9bb5f.zip
WStream: Refactor: Use reference count for memory management
Now `wstream_write` receives pointers for WBuffer objects(created with wstream_new_buffer), which stores a reference count to determine when it's safe the free the buffer. This was done to enable writing of the same buffer to multiple WStream instances
Diffstat (limited to 'src/nvim/os/channel.c')
-rw-r--r--src/nvim/os/channel.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/nvim/os/channel.c b/src/nvim/os/channel.c
index 2923ab0912..2584340950 100644
--- a/src/nvim/os/channel.c
+++ b/src/nvim/os/channel.c
@@ -107,12 +107,11 @@ bool channel_send_event(uint64_t id, char *type, typval_T *data)
msgpack_packer packer;
msgpack_packer_init(&packer, &msgpack_event_buffer, msgpack_sbuffer_write);
msgpack_rpc_notification(event_type, event_data, &packer);
- char *bytes = xmemdup(msgpack_event_buffer.data, msgpack_event_buffer.size);
wstream_write(channel->data.streams.write,
- bytes,
- msgpack_event_buffer.size,
- true);
+ wstream_new_buffer(msgpack_event_buffer.data,
+ msgpack_event_buffer.size,
+ true));
msgpack_rpc_free_object(event_data);
msgpack_sbuffer_clear(&msgpack_event_buffer);
@@ -158,9 +157,9 @@ static void parse_msgpack(RStream *rstream, void *data, bool eof)
// Perform the call
msgpack_rpc_call(channel->id, &unpacked.data, &response);
wstream_write(channel->data.streams.write,
- xmemdup(channel->sbuffer->data, channel->sbuffer->size),
- channel->sbuffer->size,
- true);
+ wstream_new_buffer(channel->sbuffer->data,
+ channel->sbuffer->size,
+ true));
// Clear the buffer for future calls
msgpack_sbuffer_clear(channel->sbuffer);