diff options
author | 2015-10-09 17:40:19 -0700 | |
---|---|---|
committer | 2015-10-09 18:12:09 -0700 | |
commit | 63bda56884f1dece057f84dc6f94f9c2a5ce1605 (patch) | |
tree | b23ede176c1951a1e33f575e770daf2626668e0d /src/core/surface/call.c | |
parent | 4d1fc5526160470b7d50a78062b80c0f5f4229e4 (diff) |
Make metadata unref atomic
We used to need to lock the metadata context to unref an mdelem. This
change makes it possible to lock only when the mdelem refcount would
reach zero.
Diffstat (limited to 'src/core/surface/call.c')
-rw-r--r-- | src/core/surface/call.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/src/core/surface/call.c b/src/core/surface/call.c index d15a3bcbad..9bf0451442 100644 --- a/src/core/surface/call.c +++ b/src/core/surface/call.c @@ -1484,7 +1484,6 @@ static void recv_metadata(grpc_exec_ctx *exec_ctx, grpc_call *call, grpc_metadata_array *dest; grpc_metadata *mdusr; int is_trailing; - grpc_mdctx *mdctx = call->metadata_context; is_trailing = call->read_state >= READ_STATE_GOT_INITIAL_METADATA; for (l = md->list.head; l != NULL; l = l->next) { @@ -1532,14 +1531,12 @@ static void recv_metadata(grpc_exec_ctx *exec_ctx, grpc_call *call, call->read_state = READ_STATE_GOT_INITIAL_METADATA; } - grpc_mdctx_lock(mdctx); for (l = md->list.head; l; l = l->next) { - if (l->md) GRPC_MDCTX_LOCKED_MDELEM_UNREF(mdctx, l->md); + if (l->md) GRPC_MDELEM_UNREF(l->md); } for (l = md->garbage.head; l; l = l->next) { - GRPC_MDCTX_LOCKED_MDELEM_UNREF(mdctx, l->md); + GRPC_MDELEM_UNREF(l->md); } - grpc_mdctx_unlock(mdctx); } grpc_call_stack *grpc_call_get_call_stack(grpc_call *call) { |