aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/event/stream.c
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2024-06-01 09:53:45 +0200
committerGitHub <noreply@github.com>2024-06-01 09:53:45 +0200
commit2008fe7b85a8c03cbff3ed51c5715ddf5cb555fd (patch)
tree3fe96507019c1d493f2e7f5212c35f063195b29d /src/nvim/event/stream.c
parent50f6d364c661b88a1edc5ffc8e284d1c0ff70810 (diff)
parentc13c50b752dca322a5ec77dea6188c9e3694549b (diff)
downloadrneovim-2008fe7b85a8c03cbff3ed51c5715ddf5cb555fd.tar.gz
rneovim-2008fe7b85a8c03cbff3ed51c5715ddf5cb555fd.tar.bz2
rneovim-2008fe7b85a8c03cbff3ed51c5715ddf5cb555fd.zip
Merge pull request #29106 from bfredl/rwstream
refactor(io): separate types for read and write streams
Diffstat (limited to 'src/nvim/event/stream.c')
-rw-r--r--src/nvim/event/stream.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/nvim/event/stream.c b/src/nvim/event/stream.c
index 0b9ed4f25b..3d26dd868f 100644
--- a/src/nvim/event/stream.c
+++ b/src/nvim/event/stream.c
@@ -85,21 +85,17 @@ void stream_init(Loop *loop, Stream *stream, int fd, uv_stream_t *uvstream)
}
stream->internal_data = NULL;
- stream->fpos = 0;
stream->curmem = 0;
stream->maxmem = 0;
stream->pending_reqs = 0;
- stream->read_cb = NULL;
stream->write_cb = NULL;
stream->close_cb = NULL;
stream->internal_close_cb = NULL;
stream->closed = false;
- stream->buffer = NULL;
stream->events = NULL;
- stream->num_bytes = 0;
}
-void stream_close(Stream *stream, stream_close_cb on_stream_close, void *data)
+void stream_close(Stream *stream, stream_close_cb on_stream_close, void *data, bool rstream)
FUNC_ATTR_NONNULL_ARG(1)
{
assert(!stream->closed);
@@ -116,18 +112,18 @@ void stream_close(Stream *stream, stream_close_cb on_stream_close, void *data)
#endif
if (!stream->pending_reqs) {
- stream_close_handle(stream);
+ stream_close_handle(stream, rstream);
}
}
-void stream_may_close(Stream *stream)
+void stream_may_close(Stream *stream, bool rstream)
{
if (!stream->closed) {
- stream_close(stream, NULL, NULL);
+ stream_close(stream, NULL, NULL, rstream);
}
}
-void stream_close_handle(Stream *stream)
+void stream_close_handle(Stream *stream, bool rstream)
FUNC_ATTR_NONNULL_ALL
{
uv_handle_t *handle = NULL;
@@ -145,16 +141,22 @@ void stream_close_handle(Stream *stream)
assert(handle != NULL);
if (!uv_is_closing(handle)) {
- uv_close(handle, close_cb);
+ uv_close(handle, rstream ? rstream_close_cb : close_cb);
}
}
-static void close_cb(uv_handle_t *handle)
+static void rstream_close_cb(uv_handle_t *handle)
{
- Stream *stream = handle->data;
+ RStream *stream = handle->data;
if (stream->buffer) {
rbuffer_free(stream->buffer);
}
+ close_cb(handle);
+}
+
+static void close_cb(uv_handle_t *handle)
+{
+ Stream *stream = handle->data;
if (stream->close_cb) {
stream->close_cb(stream, stream->close_cb_data);
}