Everything compiles...

reviewable/pr8842/r1
Craig Tiller 8 years ago
parent a7d37a371a
commit b0f3bca0ef
  1. 2
      src/core/lib/channel/http_server_filter.c
  2. 5
      src/core/lib/surface/call.c
  3. 32
      src/core/lib/transport/metadata_batch.c
  4. 6
      src/core/lib/transport/metadata_batch.h
  5. 3
      src/cpp/common/channel_filter.cc

@ -197,7 +197,7 @@ static grpc_error *server_filter_incoming_metadata(grpc_exec_ctx *exec_ctx,
if (b->idx.named.host != NULL) {
add_error(error_name, &error,
grpc_metadata_batch_substitute(
b, b->idx.named.host,
exec_ctx, b, b->idx.named.host,
grpc_mdelem_from_slices(
exec_ctx, GRPC_MDSTR_AUTHORITY,
grpc_slice_ref(GRPC_MDVALUE(b->idx.named.host->md)))));

@ -940,8 +940,9 @@ static void publish_app_metadata(grpc_call *call, grpc_metadata_batch *b,
grpc_metadata_array *dest;
grpc_metadata *mdusr;
dest = call->buffered_metadata[is_trailing];
if (dest->count + b->count > dest->capacity) {
dest->capacity = GPR_MAX(dest->capacity + b->count, dest->capacity * 3 / 2);
if (dest->count + b->list.count > dest->capacity) {
dest->capacity =
GPR_MAX(dest->capacity + b->list.count, dest->capacity * 3 / 2);
dest->metadata =
gpr_realloc(dest->metadata, sizeof(grpc_metadata) * dest->capacity);
}

@ -52,13 +52,16 @@ static void assert_valid_list(grpc_mdelem_list *list) {
GPR_ASSERT(list->tail->next == NULL);
GPR_ASSERT((list->head == list->tail) == (list->head->next == NULL));
size_t verified_count = 0;
for (l = list->head; l; l = l->next) {
GPR_ASSERT(!GRPC_MDISNULL(l->md));
GPR_ASSERT((l->prev == NULL) == (l == list->head));
GPR_ASSERT((l->next == NULL) == (l == list->tail));
if (l->next) GPR_ASSERT(l->next->prev == l);
if (l->prev) GPR_ASSERT(l->prev->next == l);
verified_count++;
}
GPR_ASSERT(list->count == verified_count);
#endif /* NDEBUG */
}
@ -154,6 +157,7 @@ static void link_head(grpc_mdelem_list *list, grpc_linked_mdelem *storage) {
list->tail = storage;
}
list->head = storage;
list->count++;
assert_valid_list(list);
}
@ -219,6 +223,7 @@ static void unlink_storage(grpc_mdelem_list *list,
} else {
list->tail = storage->prev;
}
list->count--;
assert_valid_list(list);
}
@ -230,6 +235,33 @@ void grpc_metadata_batch_remove(grpc_metadata_batch *batch,
assert_valid_callouts(batch);
}
void grpc_metadata_batch_set_value(grpc_exec_ctx *exec_ctx,
grpc_linked_mdelem *storage,
grpc_slice value) {
grpc_mdelem old = storage->md;
grpc_mdelem new =
grpc_mdelem_from_slices(exec_ctx, grpc_slice_ref(GRPC_MDKEY(old)), value);
storage->md = new;
GRPC_MDELEM_UNREF(exec_ctx, old);
}
grpc_error *grpc_metadata_batch_substitute(grpc_exec_ctx *exec_ctx,
grpc_metadata_batch *batch,
grpc_linked_mdelem *storage,
grpc_mdelem new) {
grpc_error *error = GRPC_ERROR_NONE;
grpc_mdelem old = storage->md;
if (!grpc_slice_eq(GRPC_MDKEY(new), GRPC_MDKEY(old))) {
maybe_unlink_callout(batch, storage);
storage->md = new;
error = maybe_link_callout(batch, storage);
} else {
storage->md = new;
}
GRPC_MDELEM_UNREF(exec_ctx, old);
return error;
}
void grpc_metadata_batch_clear(grpc_exec_ctx *exec_ctx,
grpc_metadata_batch *batch) {
grpc_metadata_batch_destroy(exec_ctx, batch);

@ -55,13 +55,12 @@ typedef struct grpc_linked_mdelem {
} grpc_linked_mdelem;
typedef struct grpc_mdelem_list {
size_t count;
grpc_linked_mdelem *head;
grpc_linked_mdelem *tail;
} grpc_mdelem_list;
typedef struct grpc_metadata_batch {
/* number of elements in the batch */
size_t count;
/** Metadata elements in this batch */
grpc_mdelem_list list;
grpc_metadata_batch_callouts idx;
@ -86,7 +85,8 @@ void grpc_metadata_batch_remove(grpc_metadata_batch *batch,
grpc_linked_mdelem *storage);
/** Substitute a new mdelem for an old value */
grpc_error *grpc_metadata_batch_substitute(grpc_metadata_batch *batch,
grpc_error *grpc_metadata_batch_substitute(grpc_exec_ctx *exec_ctx,
grpc_metadata_batch *batch,
grpc_linked_mdelem *storage,
grpc_mdelem new_value);

@ -49,7 +49,8 @@ grpc_linked_mdelem *MetadataBatch::AddMetadata(grpc_exec_ctx *exec_ctx,
memset(storage, 0, sizeof(grpc_linked_mdelem));
storage->md = grpc_mdelem_from_slices(exec_ctx, SliceFromCopiedString(key),
SliceFromCopiedString(value));
grpc_metadata_batch_link_head(batch_, storage);
GRPC_LOG_IF_ERROR("MetadataBatch::AddMetadata",
grpc_metadata_batch_link_head(batch_, storage));
return storage;
}

Loading…
Cancel
Save