diff --git a/include/udx.h b/include/udx.h index 757710d..666eb6b 100644 --- a/include/udx.h +++ b/include/udx.h @@ -6,6 +6,7 @@ extern "C" { #endif #include +#include #include #include #include @@ -428,7 +429,8 @@ struct udx_packet_s { bool is_app_limited; // was throughput app-limited (vs network limited) at the time the packet was transmitted? // just alloc it in place here, easier to manage - uint8_t header[UDX_HEADER_SIZE]; + alignas(4) uint8_t header[UDX_HEADER_SIZE]; + uint16_t nwbufs; // nwbufs = nbufs - 1 uint16_t nwbufs_capacity; // initially ARRAY_SIZEOF(wbuf_sml), used for realloc diff --git a/src/udx.c b/src/udx.c index 2bf3396..5fded99 100644 --- a/src/udx.c +++ b/src/udx.c @@ -489,7 +489,8 @@ send_probe (udx_stream_t *stream) { // todo: send a data packet with seq=remote_acked-1 instead - uint8_t header[20]; + alignas(4) uint8_t header[20]; + udx_write_header(header, stream, UDX_HEADER_HEARTBEAT); // fast path @@ -2655,7 +2656,9 @@ stream_on_destroy_send (udx_stream_t *stream) { static void _stream_on_destroy_send (uv_udp_send_t *req, int status) { - debug_printf("udx destroy send: err=%s\n", uv_strerror(status)); + if (status < 0) { + debug_printf("udx destroy send: err=%s\n", uv_strerror(status)); + } udx_stream_t *stream = req->data; stream_on_destroy_send(stream); free(req); @@ -2682,7 +2685,8 @@ udx_stream_destroy (udx_stream_t *stream) { // write destroy packet - uint8_t header[20]; + alignas(4) uint8_t header[20]; + udx_write_header(header, stream, UDX_HEADER_DESTROY); stream->seq++; diff --git a/test/stream-bbr-state.c b/test/stream-bbr-state.c index d498d3a..f58b9ef 100644 --- a/test/stream-bbr-state.c +++ b/test/stream-bbr-state.c @@ -166,11 +166,13 @@ send_periodic (uv_timer_t *timer) { static void send_ack_slow (udx_stream_write_t *r, int status, int unordered) { // printf("send_ack (slow)\n"); + free(r); } static void send_ack_fast (udx_stream_write_t *r, int status, int unordered) { // printf("send_ack (fast) elapsed=%ld\n", uv_now(&loop) - start_ms); + free(r); } static void diff --git a/test/stream-change-remote.c b/test/stream-change-remote.c index af41b65..2bc4f83 100644 --- a/test/stream-change-remote.c +++ b/test/stream-change-remote.c @@ -162,7 +162,9 @@ main () { e = udx_stream_connect(&dstream, &dsock, 3, (struct sockaddr *) &caddr); assert(e == 0); - uv_buf_t buf = uv_buf_init(malloc(NBYTES_TO_SEND), NBYTES_TO_SEND); + char *data = malloc(NBYTES_TO_SEND); + + uv_buf_t buf = uv_buf_init(data, NBYTES_TO_SEND); write_hash = hash(write_hash, (uint8_t *) buf.base, buf.len); @@ -177,6 +179,7 @@ main () { printf("read_hash=%lu write_hash=%lu\n", read_hash, write_hash); free(req); + free(data); return 0; } diff --git a/test/stream-destroy-before-connect.c b/test/stream-destroy-before-connect.c index 00e2907..6e3d9cb 100644 --- a/test/stream-destroy-before-connect.c +++ b/test/stream-destroy-before-connect.c @@ -20,6 +20,9 @@ main () { e = udx_stream_destroy(&stream); assert(e == 0); + e = uv_run(&loop, UV_RUN_DEFAULT); + assert(e == 0); + uv_loop_close(&loop); return 0; diff --git a/test/stream-relay-force-slow-path.c b/test/stream-relay-force-slow-path.c index fa9c660..2e492fc 100644 --- a/test/stream-relay-force-slow-path.c +++ b/test/stream-relay-force-slow-path.c @@ -133,7 +133,9 @@ main () { e = udx_stream_connect(&dstream, &dsock, 3, (struct sockaddr *) &caddr); assert(e == 0); - uv_buf_t buf = uv_buf_init(calloc(NBYTES_TO_SEND, 1), NBYTES_TO_SEND); + char *data = calloc(NBYTES_TO_SEND, 1); + + uv_buf_t buf = uv_buf_init(data, NBYTES_TO_SEND); memcpy(buf.base, "hello", 5); @@ -148,6 +150,7 @@ main () { assert(nbytes_read == NBYTES_TO_SEND && read_hash == write_hash); free(req); + free(data); return 0; } diff --git a/test/stream-relay.c b/test/stream-relay.c index f79346b..37ea08d 100644 --- a/test/stream-relay.c +++ b/test/stream-relay.c @@ -131,7 +131,9 @@ main () { e = udx_stream_connect(&dstream, &dsock, 3, (struct sockaddr *) &caddr); assert(e == 0); - uv_buf_t buf = uv_buf_init(calloc(NBYTES_TO_SEND, 1), NBYTES_TO_SEND); + char *data = calloc(NBYTES_TO_SEND, 1); + + uv_buf_t buf = uv_buf_init(data, NBYTES_TO_SEND); memcpy(buf.base, "hello", 5); @@ -146,6 +148,7 @@ main () { assert(nbytes_read == NBYTES_TO_SEND && read_hash == write_hash); free(req); + free(data); return 0; } diff --git a/test/stream-write-read-multiple.c b/test/stream-write-read-multiple.c index 4c95dca..eeac601 100644 --- a/test/stream-write-read-multiple.c +++ b/test/stream-write-read-multiple.c @@ -92,5 +92,8 @@ main () { assert(ack_called == 2 && total_read == buf.len * 2); + free(areq); + free(breq); + return 0; } diff --git a/test/stream-write-read-perf.c b/test/stream-write-read-perf.c index a7722fd..e323e41 100644 --- a/test/stream-write-read-perf.c +++ b/test/stream-write-read-perf.c @@ -59,24 +59,24 @@ on_read (udx_stream_t *handle, ssize_t read_len, const uv_buf_t *buf) { } static void -on_b_sock_close () { +on_b_sock_close (udx_socket_t *socket) { printf("sending socket closing\n"); } static void -on_b_stream_close () { +on_b_stream_close (udx_stream_t *stream, int status) { printf("sending stream closing\n"); int e = udx_socket_close(&bsock); assert(e == 0 && "udx_socket_close (sender, 'b')"); } static void -on_a_sock_close () { +on_a_sock_close (udx_socket_t *socket) { printf("receiving socket closing\n"); } static void -on_a_stream_close () { +on_a_stream_close (udx_stream_t *stream, int status) { printf("receiving stream closing\n"); int e = udx_socket_close(&asock); assert(e == 0 && "udx_socket_close (receiver, 'a')");