From 61fea2485c875db32896d65a4e3e6f371106f8b6 Mon Sep 17 00:00:00 2001 From: Tony Ivanov Date: Wed, 29 Jan 2025 16:31:19 +0100 Subject: [PATCH] expressed changed status as return statement --- src/udx.c | 9 ++++++--- test/stream-change-remote.c | 9 +++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/udx.c b/src/udx.c index 81b784b..b793b2b 100644 --- a/src/udx.c +++ b/src/udx.c @@ -2570,14 +2570,14 @@ udx_stream_change_remote (udx_stream_t *stream, udx_socket_t *socket, uint32_t r stream->remote_id = remote_id; set_stream_socket(stream, socket); - if (stream->seq != stream->remote_acked) { + bool defer_change = stream->seq != stream->remote_acked; + if (defer_change) { debug_printf("change_remote: id=%u RA=%u Seq=%u\n", stream->local_id, stream->remote_acked, stream->seq); stream->remote_changing = true; stream->seq_on_remote_changed = stream->seq; stream->on_remote_changed = on_remote_changed; } else { debug_printf("change_remote: id=%u RA=%u Seq=%u, acting now!\n", stream->local_id, stream->remote_acked, stream->seq); - on_remote_changed(stream); } stream->mtu = UDX_MTU_BASE; @@ -2586,7 +2586,10 @@ udx_stream_change_remote (udx_stream_t *stream, udx_socket_t *socket, uint32_t r stream->mtu_probe_size = UDX_MTU_BASE; // starts with first ack, counts as a confirmation of base stream->mtu_max = UDX_MTU_MAX; // revised in connect() - return update_poll(stream->socket); + int err = update_poll(stream->socket); + if (err != 0) return err; + + return !defer_change; } int diff --git a/test/stream-change-remote.c b/test/stream-change-remote.c index 8c9f54f..af41b65 100644 --- a/test/stream-change-remote.c +++ b/test/stream-change-remote.c @@ -58,6 +58,11 @@ on_remote_change (udx_stream_t *s) { } } +void +on_immediate_change (udx_stream_t *s) { + assert(false && "should not be called"); +} + void on_read (udx_stream_t *handle, ssize_t read_len, const uv_buf_t *buf) { int e; @@ -71,8 +76,8 @@ on_read (udx_stream_t *handle, ssize_t read_len, const uv_buf_t *buf) { // swap to relay 1/3 of the way into the stream if (nbytes_read > (NBYTES_TO_SEND / 3) && !changed) { - e = udx_stream_change_remote(&astream, &bsock, 4, (struct sockaddr *) &daddr, on_remote_change); - assert(e == 0 && "reconnect"); + e = udx_stream_change_remote(&astream, &bsock, 4, (struct sockaddr *) &daddr, on_immediate_change); + assert(e == 1 && "reconnect"); e = udx_stream_change_remote(&dstream, &csock, 1, (struct sockaddr *) &aaddr, on_remote_change); assert(e == 0 && "reconnect");