Skip to content

Commit 9e2f116

Browse files
authored
expressed changed status as return statement (holepunchto#243)
1 parent 57589d0 commit 9e2f116

2 files changed

Lines changed: 13 additions & 5 deletions

File tree

src/udx.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2674,14 +2674,14 @@ udx_stream_change_remote (udx_stream_t *stream, udx_socket_t *socket, uint32_t r
26742674
stream->remote_id = remote_id;
26752675
set_stream_socket(stream, socket);
26762676

2677-
if (stream->seq != stream->remote_acked) {
2677+
bool defer_change = stream->seq != stream->remote_acked;
2678+
if (defer_change) {
26782679
debug_printf("change_remote: id=%u RA=%u Seq=%u\n", stream->local_id, stream->remote_acked, stream->seq);
26792680
stream->remote_changing = true;
26802681
stream->seq_on_remote_changed = stream->seq;
26812682
stream->on_remote_changed = on_remote_changed;
26822683
} else {
26832684
debug_printf("change_remote: id=%u RA=%u Seq=%u, acting now!\n", stream->local_id, stream->remote_acked, stream->seq);
2684-
on_remote_changed(stream);
26852685
}
26862686

26872687
stream->mtu = UDX_MTU_BASE;
@@ -2690,7 +2690,10 @@ udx_stream_change_remote (udx_stream_t *stream, udx_socket_t *socket, uint32_t r
26902690
stream->mtu_probe_size = UDX_MTU_BASE; // starts with first ack, counts as a confirmation of base
26912691
stream->mtu_max = UDX_MTU_MAX; // revised in connect()
26922692

2693-
return update_poll(stream->socket);
2693+
int err = update_poll(stream->socket);
2694+
if (err != 0) return err;
2695+
2696+
return !defer_change;
26942697
}
26952698

26962699
int

test/stream-change-remote.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ on_remote_change (udx_stream_t *s) {
5858
}
5959
}
6060

61+
void
62+
on_immediate_change (udx_stream_t *s) {
63+
assert(false && "should not be called");
64+
}
65+
6166
void
6267
on_read (udx_stream_t *handle, ssize_t read_len, const uv_buf_t *buf) {
6368
int e;
@@ -71,8 +76,8 @@ on_read (udx_stream_t *handle, ssize_t read_len, const uv_buf_t *buf) {
7176
// swap to relay 1/3 of the way into the stream
7277

7378
if (nbytes_read > (NBYTES_TO_SEND / 3) && !changed) {
74-
e = udx_stream_change_remote(&astream, &bsock, 4, (struct sockaddr *) &daddr, on_remote_change);
75-
assert(e == 0 && "reconnect");
79+
e = udx_stream_change_remote(&astream, &bsock, 4, (struct sockaddr *) &daddr, on_immediate_change);
80+
assert(e == 1 && "reconnect");
7681

7782
e = udx_stream_change_remote(&dstream, &csock, 1, (struct sockaddr *) &aaddr, on_remote_change);
7883
assert(e == 0 && "reconnect");

0 commit comments

Comments
 (0)