aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Mark D. Roth <roth@google.com>2016-12-02 22:16:03 +0000
committerGravatar Mark D. Roth <roth@google.com>2016-12-02 22:16:03 +0000
commit0f4bbba82687420a2ebc56ea66021c29890472f0 (patch)
treeb40062cc71f4391a1a51e5f18a4f135b351903a5 /src
parenta0bcfbbfe2378459a439a3344df59774e32cd774 (diff)
Fix allocation bugs in server shutdown.
Diffstat (limited to 'src')
-rw-r--r--src/core/ext/transport/chttp2/server/chttp2_server.c9
-rw-r--r--src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c4
2 files changed, 6 insertions, 7 deletions
diff --git a/src/core/ext/transport/chttp2/server/chttp2_server.c b/src/core/ext/transport/chttp2/server/chttp2_server.c
index 50cbafab56..dc85d1cf5c 100644
--- a/src/core/ext/transport/chttp2/server/chttp2_server.c
+++ b/src/core/ext/transport/chttp2/server/chttp2_server.c
@@ -338,11 +338,12 @@ error:
}
if (tcp_server) {
grpc_tcp_server_unref(exec_ctx, tcp_server);
+ } else {
+ grpc_channel_args_destroy(state->args);
+ grpc_chttp2_server_handshaker_factory_destroy(exec_ctx,
+ state->handshaker_factory);
+ gpr_free(state);
}
- grpc_channel_args_destroy(state->args);
- grpc_chttp2_server_handshaker_factory_destroy(exec_ctx,
- state->handshaker_factory);
- gpr_free(state);
*port_num = 0;
done:
diff --git a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c
index b9a833803b..5f41728132 100644
--- a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c
+++ b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c
@@ -69,6 +69,7 @@ static void server_security_handshaker_factory_destroy(
(server_security_handshaker_factory *)hf;
GRPC_SECURITY_CONNECTOR_UNREF(&handshaker_factory->security_connector->base,
"server");
+ gpr_free(hf);
}
static const grpc_chttp2_server_handshaker_factory_vtable
@@ -124,9 +125,6 @@ done:
gpr_log(GPR_ERROR, "%s", msg);
grpc_error_free_string(msg);
GRPC_ERROR_UNREF(err);
- if (sc != NULL) {
- GRPC_SECURITY_CONNECTOR_UNREF(&sc->base, "server");
- }
}
return port_num;
}