Restore iomgr

pull/2549/head
Hongwei Wang 9 years ago
parent 944842384d
commit 490dc0e66c
  1. 21
      src/core/iomgr/iomgr.c
  2. 15
      src/core/iomgr/iomgr_internal.h
  3. 40
      src/core/surface/channel.c

@ -44,16 +44,6 @@
#include <grpc/support/sync.h> #include <grpc/support/sync.h>
#include <grpc/support/thd.h> #include <grpc/support/thd.h>
#ifdef GRPC_IOMGR_REFCOUNT_DEBUG
static void iomgr_object_trace(const char *action, grpc_iomgr_object *obj,
const char *file, int line) {
gpr_log(GPR_DEBUG, "iomgr object %s: %p - %s from %s:%i", action,
obj, obj->name, file, line);
}
#else
#define iomgr_object_trace(action, obj, file, line)
#endif
static gpr_mu g_mu; static gpr_mu g_mu;
static gpr_cv g_rcv; static gpr_cv g_rcv;
static grpc_iomgr_closure *g_cbs_head = NULL; static grpc_iomgr_closure *g_cbs_head = NULL;
@ -194,12 +184,8 @@ void grpc_iomgr_shutdown(void) {
gpr_cv_destroy(&g_rcv); gpr_cv_destroy(&g_rcv);
} }
void grpc_iomgr_register_object_internal(grpc_iomgr_object *obj, void grpc_iomgr_register_object(grpc_iomgr_object *obj, const char *name) {
const char *name,
const char *file,
int line) {
obj->name = gpr_strdup(name); obj->name = gpr_strdup(name);
iomgr_object_trace("register", obj, file, line);
gpr_mu_lock(&g_mu); gpr_mu_lock(&g_mu);
obj->next = &g_root_object; obj->next = &g_root_object;
obj->prev = obj->next->prev; obj->prev = obj->next->prev;
@ -207,10 +193,7 @@ void grpc_iomgr_register_object_internal(grpc_iomgr_object *obj,
gpr_mu_unlock(&g_mu); gpr_mu_unlock(&g_mu);
} }
void grpc_iomgr_unregister_object_internal(grpc_iomgr_object *obj, void grpc_iomgr_unregister_object(grpc_iomgr_object *obj) {
const char *file,
int line) {
iomgr_object_trace("unregister", obj, file, line);
gpr_mu_lock(&g_mu); gpr_mu_lock(&g_mu);
obj->next->prev = obj->prev; obj->next->prev = obj->prev;
obj->prev->next = obj->next; obj->prev->next = obj->next;

@ -46,19 +46,8 @@ typedef struct grpc_iomgr_object {
int grpc_maybe_call_delayed_callbacks(gpr_mu *drop_mu, int success); int grpc_maybe_call_delayed_callbacks(gpr_mu *drop_mu, int success);
void grpc_iomgr_add_delayed_callback(grpc_iomgr_closure *iocb, int success); void grpc_iomgr_add_delayed_callback(grpc_iomgr_closure *iocb, int success);
void grpc_iomgr_register_object_internal(grpc_iomgr_object *obj, void grpc_iomgr_register_object(grpc_iomgr_object *obj, const char *name);
const char *name, void grpc_iomgr_unregister_object(grpc_iomgr_object *obj);
const char *file,
int line);
void grpc_iomgr_unregister_object_internal(grpc_iomgr_object *obj,
const char *file,
int line);
#define grpc_iomgr_register_object(obj, name) \
grpc_iomgr_register_object_internal(obj, name, __FILE__, __LINE__)
#define grpc_iomgr_unregister_object(obj) \
grpc_iomgr_unregister_object_internal(obj, __FILE__, __LINE__)
void grpc_iomgr_platform_init(void); void grpc_iomgr_platform_init(void);
void grpc_iomgr_platform_shutdown(void); void grpc_iomgr_platform_shutdown(void);

@ -104,8 +104,7 @@ grpc_channel *grpc_channel_create_from_filters(
channel->grpc_status_string = grpc_mdstr_from_string(mdctx, "grpc-status", 0); channel->grpc_status_string = grpc_mdstr_from_string(mdctx, "grpc-status", 0);
channel->grpc_compression_algorithm_string = channel->grpc_compression_algorithm_string =
grpc_mdstr_from_string(mdctx, "grpc-encoding", 0); grpc_mdstr_from_string(mdctx, "grpc-encoding", 0);
channel->grpc_message_string = channel->grpc_message_string = grpc_mdstr_from_string(mdctx, "grpc-message", 0);
grpc_mdstr_from_string(mdctx, "grpc-message", 0);
for (i = 0; i < NUM_CACHED_STATUS_ELEMS; i++) { for (i = 0; i < NUM_CACHED_STATUS_ELEMS; i++) {
char buf[GPR_LTOA_MIN_BUFSIZE]; char buf[GPR_LTOA_MIN_BUFSIZE];
gpr_ltoa(i, buf); gpr_ltoa(i, buf);
@ -147,38 +146,31 @@ char *grpc_channel_get_target(grpc_channel *channel) {
} }
static grpc_call *grpc_channel_create_call_internal( static grpc_call *grpc_channel_create_call_internal(
grpc_channel *channel, grpc_call *parent_call, gpr_uint32 propagation_mask, grpc_channel *channel, grpc_completion_queue *cq, grpc_mdelem *path_mdelem,
grpc_completion_queue *cq, grpc_mdelem *path_mdelem,
grpc_mdelem *authority_mdelem, gpr_timespec deadline) { grpc_mdelem *authority_mdelem, gpr_timespec deadline) {
grpc_mdelem *send_metadata[2]; grpc_mdelem *send_metadata[2];
int num_metadata = 0;
GPR_ASSERT(channel->is_client); GPR_ASSERT(channel->is_client);
send_metadata[num_metadata++] = path_mdelem; send_metadata[0] = path_mdelem;
if (authority_mdelem != NULL) { send_metadata[1] = authority_mdelem;
send_metadata[num_metadata++] = authority_mdelem;
}
return grpc_call_create(channel, parent_call, propagation_mask, cq, NULL, return grpc_call_create(channel, cq, NULL, send_metadata,
send_metadata, num_metadata, deadline); GPR_ARRAY_SIZE(send_metadata), deadline);
} }
grpc_call *grpc_channel_create_call(grpc_channel *channel, grpc_call *grpc_channel_create_call(grpc_channel *channel,
grpc_call *parent_call,
gpr_uint32 propagation_mask,
grpc_completion_queue *cq, grpc_completion_queue *cq,
const char *method, const char *host, const char *method, const char *host,
gpr_timespec deadline) { gpr_timespec deadline) {
return grpc_channel_create_call_internal( return grpc_channel_create_call_internal(
channel, parent_call, propagation_mask, cq, channel, cq,
grpc_mdelem_from_metadata_strings( grpc_mdelem_from_metadata_strings(
channel->metadata_context, GRPC_MDSTR_REF(channel->path_string), channel->metadata_context, GRPC_MDSTR_REF(channel->path_string),
grpc_mdstr_from_string(channel->metadata_context, method, 0)), grpc_mdstr_from_string(channel->metadata_context, method, 0)),
host ?
grpc_mdelem_from_metadata_strings( grpc_mdelem_from_metadata_strings(
channel->metadata_context, GRPC_MDSTR_REF(channel->authority_string), channel->metadata_context, GRPC_MDSTR_REF(channel->authority_string),
grpc_mdstr_from_string(channel->metadata_context, host, 0)) : NULL, grpc_mdstr_from_string(channel->metadata_context, host, 0)),
deadline); deadline);
} }
@ -188,9 +180,9 @@ void *grpc_channel_register_call(grpc_channel *channel, const char *method,
rc->path = grpc_mdelem_from_metadata_strings( rc->path = grpc_mdelem_from_metadata_strings(
channel->metadata_context, GRPC_MDSTR_REF(channel->path_string), channel->metadata_context, GRPC_MDSTR_REF(channel->path_string),
grpc_mdstr_from_string(channel->metadata_context, method, 0)); grpc_mdstr_from_string(channel->metadata_context, method, 0));
rc->authority = host ? grpc_mdelem_from_metadata_strings( rc->authority = grpc_mdelem_from_metadata_strings(
channel->metadata_context, GRPC_MDSTR_REF(channel->authority_string), channel->metadata_context, GRPC_MDSTR_REF(channel->authority_string),
grpc_mdstr_from_string(channel->metadata_context, host, 0)) : NULL; grpc_mdstr_from_string(channel->metadata_context, host, 0));
gpr_mu_lock(&channel->registered_call_mu); gpr_mu_lock(&channel->registered_call_mu);
rc->next = channel->registered_calls; rc->next = channel->registered_calls;
channel->registered_calls = rc; channel->registered_calls = rc;
@ -199,14 +191,12 @@ void *grpc_channel_register_call(grpc_channel *channel, const char *method,
} }
grpc_call *grpc_channel_create_registered_call( grpc_call *grpc_channel_create_registered_call(
grpc_channel *channel, grpc_call *parent_call, gpr_uint32 propagation_mask, grpc_channel *channel, grpc_completion_queue *completion_queue,
grpc_completion_queue *completion_queue, void *registered_call_handle, void *registered_call_handle, gpr_timespec deadline) {
gpr_timespec deadline) {
registered_call *rc = registered_call_handle; registered_call *rc = registered_call_handle;
return grpc_channel_create_call_internal( return grpc_channel_create_call_internal(
channel, parent_call, propagation_mask, completion_queue, channel, completion_queue, GRPC_MDELEM_REF(rc->path),
GRPC_MDELEM_REF(rc->path), GRPC_MDELEM_REF(rc->authority), deadline);
rc->authority ? GRPC_MDELEM_REF(rc->authority) : NULL, deadline);
} }
#ifdef GRPC_CHANNEL_REF_COUNT_DEBUG #ifdef GRPC_CHANNEL_REF_COUNT_DEBUG
@ -235,9 +225,7 @@ static void destroy_channel(void *p, int ok) {
registered_call *rc = channel->registered_calls; registered_call *rc = channel->registered_calls;
channel->registered_calls = rc->next; channel->registered_calls = rc->next;
GRPC_MDELEM_UNREF(rc->path); GRPC_MDELEM_UNREF(rc->path);
if (rc->authority) {
GRPC_MDELEM_UNREF(rc->authority); GRPC_MDELEM_UNREF(rc->authority);
}
gpr_free(rc); gpr_free(rc);
} }
grpc_mdctx_unref(channel->metadata_context); grpc_mdctx_unref(channel->metadata_context);

Loading…
Cancel
Save