Skip to content

Commit fa576bd

Browse files
authored
close relayed stream immediately on udx_stream_destroy() (holepunchto#282)
1 parent 1302a45 commit fa576bd

2 files changed

Lines changed: 19 additions & 6 deletions

File tree

src/udx.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2727,7 +2727,7 @@ udx_stream_destroy (udx_stream_t *stream) {
27272727
stream->status |= UDX_STREAM_DESTROYING;
27282728

27292729
if (stream->relayed) {
2730-
close_stream(stream, 0);
2730+
close_stream_internal(stream, 0);
27312731
return 0;
27322732
}
27332733

test/stream-relay.c

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ on_ack (udx_stream_write_t *req, int status, int unordered) {
4040
assert(status == 0);
4141
// assert(unordered == 0);
4242

43-
uv_stop(&loop);
43+
udx_stream_destroy(&astream);
44+
udx_stream_destroy(&bstream);
45+
udx_stream_destroy(&cstream);
46+
udx_stream_destroy(&dstream);
4447

4548
ack_called = true;
4649
}
@@ -59,6 +62,16 @@ on_read (udx_stream_t *handle, ssize_t read_len, const uv_buf_t *buf) {
5962
read_called = true;
6063
}
6164

65+
int nclosed;
66+
void
67+
on_close (udx_stream_t *s, int err) {
68+
nclosed++;
69+
70+
if (nclosed == 4) {
71+
uv_stop(&loop);
72+
}
73+
}
74+
6275
int
6376
main () {
6477

@@ -98,16 +111,16 @@ main () {
98111
e = udx_socket_bind(&dsock, (struct sockaddr *) &daddr, 0);
99112
assert(e == 0);
100113

101-
e = udx_stream_init(&udx, &astream, 1, NULL, NULL);
114+
e = udx_stream_init(&udx, &astream, 1, on_close, NULL);
102115
assert(e == 0);
103116

104-
e = udx_stream_init(&udx, &bstream, 2, NULL, NULL);
117+
e = udx_stream_init(&udx, &bstream, 2, on_close, NULL);
105118
assert(e == 0);
106119

107-
e = udx_stream_init(&udx, &cstream, 3, NULL, NULL);
120+
e = udx_stream_init(&udx, &cstream, 3, on_close, NULL);
108121
assert(e == 0);
109122

110-
e = udx_stream_init(&udx, &dstream, 4, NULL, NULL);
123+
e = udx_stream_init(&udx, &dstream, 4, on_close, NULL);
111124
assert(e == 0);
112125

113126
e = udx_stream_relay_to(&cstream, &bstream);

0 commit comments

Comments
 (0)