diff options
author | Craig Tiller <ctiller@google.com> | 2016-03-04 10:50:56 -0800 |
---|---|---|
committer | Craig Tiller <ctiller@google.com> | 2016-03-04 10:50:56 -0800 |
commit | ad23ae196702cc3889a8c04a21273aa6a43aad75 (patch) | |
tree | c93c1d3469a38d8a06a2a987b89b5ebf6c494622 /src | |
parent | af22087a43ffe7e69cb269419f046635adfc46e6 (diff) |
Unref writable streams on transport close to avoid leaks
Diffstat (limited to 'src')
-rw-r--r-- | src/core/transport/chttp2_transport.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/core/transport/chttp2_transport.c b/src/core/transport/chttp2_transport.c index ce54f7e6e8..19265252ca 100644 --- a/src/core/transport/chttp2_transport.c +++ b/src/core/transport/chttp2_transport.c @@ -432,6 +432,14 @@ static void close_transport_locked(grpc_exec_ctx *exec_ctx, if (t->ep) { allow_endpoint_shutdown_locked(exec_ctx, t); } + + /* flush writable stream list to avoid dangling references */ + grpc_chttp2_stream_global *stream_global; + grpc_chttp2_stream_writing *stream_writing; + while (grpc_chttp2_list_pop_writable_stream( + &t->global, &t->writing, &stream_global, &stream_writing)) { + GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "chttp2_writing"); + } } } @@ -617,7 +625,6 @@ static void unlock(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t) { void grpc_chttp2_become_writable(grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global *stream_global) { if (!TRANSPORT_FROM_GLOBAL(transport_global)->closed && - !stream_global->write_closed && grpc_chttp2_list_add_writable_stream(transport_global, stream_global)) { GRPC_CHTTP2_STREAM_REF(stream_global, "chttp2_writing"); } |