aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/transport/chttp2_transport.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/transport/chttp2_transport.c')
-rw-r--r--src/core/transport/chttp2_transport.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/src/core/transport/chttp2_transport.c b/src/core/transport/chttp2_transport.c
index ea579cf4a5..8b1fb78917 100644
--- a/src/core/transport/chttp2_transport.c
+++ b/src/core/transport/chttp2_transport.c
@@ -684,10 +684,11 @@ static void unlock(transport *t) {
int i;
pending_goaway *goaways = NULL;
grpc_endpoint *ep = t->ep;
- grpc_stream_op_buffer nuke_now = t->nuke_later_sopb;
-
- if (nuke_now.nops) {
- memset(&t->nuke_later_sopb, 0, sizeof(t->nuke_later_sopb));
+ grpc_stream_op_buffer nuke_now;
+
+ grpc_sopb_init(&nuke_now);
+ if (t->nuke_later_sopb.nops) {
+ grpc_sopb_swap(&nuke_now, &t->nuke_later_sopb);
}
/* see if we need to trigger a write - and if so, get the data ready */
@@ -757,9 +758,7 @@ static void unlock(transport *t) {
unref_transport(t);
}
- if (nuke_now.nops) {
- grpc_sopb_destroy(&nuke_now);
- }
+ grpc_sopb_destroy(&nuke_now);
gpr_free(goaways);
}
@@ -1698,13 +1697,10 @@ static grpc_stream_state compute_state(gpr_uint8 write_closed,
static int prepare_callbacks(transport *t) {
stream *s;
- grpc_stream_op_buffer temp_sopb;
int n = 0;
while ((s = stream_list_remove_head(t, PENDING_CALLBACKS))) {
int execute = 1;
- temp_sopb = s->parser.incoming_sopb;
- s->parser.incoming_sopb = s->callback_sopb;
- s->callback_sopb = temp_sopb;
+ grpc_sopb_swap(&s->parser.incoming_sopb, &s->callback_sopb);
s->callback_state = compute_state(s->sent_write_closed, s->read_closed);
if (s->callback_state == GRPC_STREAM_CLOSED) {