diff options
author | Craig Tiller <ctiller@google.com> | 2017-04-20 14:46:37 -0700 |
---|---|---|
committer | Craig Tiller <ctiller@google.com> | 2017-04-20 14:46:37 -0700 |
commit | 0d23d8954f2ee9b809d21ec4e156b2347c8c340c (patch) | |
tree | a8b7a86bba8b8362438bc8b55fc655901f6ee515 /src/core/lib/slice/slice_buffer.c | |
parent | f414008fe9eeb08bcf87a827a72318ca58d72519 (diff) |
Add flexibility on *which* slice gets reffed
Use it to ensure that sb_move_first acts predictably
Diffstat (limited to 'src/core/lib/slice/slice_buffer.c')
-rw-r--r-- | src/core/lib/slice/slice_buffer.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/core/lib/slice/slice_buffer.c b/src/core/lib/slice/slice_buffer.c index 5a4b434d28..e8d41ca0f7 100644 --- a/src/core/lib/slice/slice_buffer.c +++ b/src/core/lib/slice/slice_buffer.c @@ -274,12 +274,18 @@ static void slice_buffer_move_first_maybe_ref(grpc_slice_buffer *src, size_t n, } else if (n == slice_len) { grpc_slice_buffer_add(dst, slice); break; - } else { /* n < slice_len */ + } else if (incref) { /* n < slice_len */ grpc_slice_buffer_undo_take_first( - src, grpc_slice_split_tail_maybe_ref(&slice, n, incref)); + src, grpc_slice_split_tail_maybe_ref(&slice, n, GRPC_SLICE_REF_BOTH)); GPR_ASSERT(GRPC_SLICE_LENGTH(slice) == n); grpc_slice_buffer_add(dst, slice); break; + } else { /* n < slice_len */ + grpc_slice_buffer_undo_take_first( + src, grpc_slice_split_tail_maybe_ref(&slice, n, GRPC_SLICE_REF_TAIL)); + GPR_ASSERT(GRPC_SLICE_LENGTH(slice) == n); + grpc_slice_buffer_add_indexed(dst, slice); + break; } } GPR_ASSERT(dst->length == output_len); |