Skip to content
Snippets Groups Projects
Commit cb09e700 authored by Paul Marks's avatar Paul Marks
Browse files

Fix a memory leak in grpc_udp_server_add_port()

This occurred when running a QUIC test in an IPv6-only environment:

E1123 16:04:20.282041  159850 heap-profile-table.cc:489] RAW: Leak of 1360 bytes in 17 objects allocated from:
        @ 0x7f160b8923ab gpr_malloc
        @ 0x7f160b8cff27 copy_error_and_unref
        @ 0x7f160b8d0151 grpc_error_set_str
        @ 0x7f160b8e3ff8 error_for_fd
        @ 0x7f160b8e3edd grpc_create_dualstack_socket
        @ 0x7f160b8ea5c3 grpc_udp_server_add_port
        @ 0x7f1627a65d20 grpc_server_add_quic_port
        @ 0x7f1627a6bea4 grpc::(anonymous namespace)::QuicServerCredentialsImpl::AddPortToServer()
        ...
parent 6ff81e91
No related branches found
No related tags found
No related merge requests found
...@@ -388,7 +388,9 @@ int grpc_udp_server_add_port(grpc_udp_server *s, ...@@ -388,7 +388,9 @@ int grpc_udp_server_add_port(grpc_udp_server *s,
/* Try listening on IPv6 first. */ /* Try listening on IPv6 first. */
addr = &wild6; addr = &wild6;
// TODO(rjshade): Test and propagate the returned grpc_error*: // TODO(rjshade): Test and propagate the returned grpc_error*:
grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP, &dsmode, &fd); GRPC_ERROR_UNREF(
grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP,
&dsmode, &fd));
allocated_port1 = add_socket_to_server(s, fd, addr, read_cb, orphan_cb); allocated_port1 = add_socket_to_server(s, fd, addr, read_cb, orphan_cb);
if (fd >= 0 && dsmode == GRPC_DSMODE_DUALSTACK) { if (fd >= 0 && dsmode == GRPC_DSMODE_DUALSTACK) {
goto done; goto done;
...@@ -402,7 +404,9 @@ int grpc_udp_server_add_port(grpc_udp_server *s, ...@@ -402,7 +404,9 @@ int grpc_udp_server_add_port(grpc_udp_server *s,
} }
// TODO(rjshade): Test and propagate the returned grpc_error*: // TODO(rjshade): Test and propagate the returned grpc_error*:
grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP, &dsmode, &fd); GRPC_ERROR_UNREF(
grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP,
&dsmode, &fd));
if (fd < 0) { if (fd < 0) {
gpr_log(GPR_ERROR, "Unable to create socket: %s", strerror(errno)); gpr_log(GPR_ERROR, "Unable to create socket: %s", strerror(errno));
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment