コード例 #1
0
static void me_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) {
    half *m = (half *)ep;
    gpr_mu_lock(&m->parent->mu);
    m->parent->shutdown = true;
    if (m->on_read) {
        grpc_exec_ctx_sched(exec_ctx, m->on_read, GRPC_ERROR_CREATE("Shutdown"),
                            NULL);
        m->on_read = NULL;
    }
    m = other_half(m);
    if (m->on_read) {
        grpc_exec_ctx_sched(exec_ctx, m->on_read, GRPC_ERROR_CREATE("Shutdown"),
                            NULL);
        m->on_read = NULL;
    }
    gpr_mu_unlock(&m->parent->mu);
    grpc_resource_user_shutdown(exec_ctx, m->resource_user);
}
コード例 #2
0
static void me_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
                     grpc_slice_buffer *slices, grpc_closure *cb) {
    half *m = other_half((half *)ep);
    gpr_mu_lock(&m->parent->mu);
    grpc_error *error = GRPC_ERROR_NONE;
    if (m->parent->shutdown) {
        error = GRPC_ERROR_CREATE("Endpoint already shutdown");
    } else if (m->on_read != NULL) {
        for (size_t i = 0; i < slices->count; i++) {
            grpc_slice_buffer_add(m->on_read_out, grpc_slice_ref(slices->slices[i]));
        }
        grpc_exec_ctx_sched(exec_ctx, m->on_read, GRPC_ERROR_NONE, NULL);
        m->on_read = NULL;
    } else {
        for (size_t i = 0; i < slices->count; i++) {
            grpc_slice_buffer_add(&m->read_buffer, grpc_slice_ref(slices->slices[i]));
        }
    }
    gpr_mu_unlock(&m->parent->mu);
    grpc_exec_ctx_sched(exec_ctx, cb, error, NULL);
}
コード例 #3
0
ファイル: passthru_endpoint.c プロジェクト: endobson/grpc
static void me_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
                        grpc_error *why) {
  half *m = (half *)ep;
  gpr_mu_lock(&m->parent->mu);
  m->parent->shutdown = true;
  if (m->on_read) {
    GRPC_CLOSURE_SCHED(
        exec_ctx, m->on_read,
        GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Shutdown", &why, 1));
    m->on_read = NULL;
  }
  m = other_half(m);
  if (m->on_read) {
    GRPC_CLOSURE_SCHED(
        exec_ctx, m->on_read,
        GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Shutdown", &why, 1));
    m->on_read = NULL;
  }
  gpr_mu_unlock(&m->parent->mu);
  grpc_resource_user_shutdown(exec_ctx, m->resource_user);
  GRPC_ERROR_UNREF(why);
}
コード例 #4
0
ファイル: passthru_endpoint.c プロジェクト: endobson/grpc
static void me_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
                     grpc_slice_buffer *slices, grpc_closure *cb) {
  half *m = other_half((half *)ep);
  gpr_mu_lock(&m->parent->mu);
  grpc_error *error = GRPC_ERROR_NONE;
  m->parent->stats->num_writes++;
  if (m->parent->shutdown) {
    error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Endpoint already shutdown");
  } else if (m->on_read != NULL) {
    for (size_t i = 0; i < slices->count; i++) {
      grpc_slice_buffer_add(m->on_read_out, grpc_slice_copy(slices->slices[i]));
    }
    GRPC_CLOSURE_SCHED(exec_ctx, m->on_read, GRPC_ERROR_NONE);
    m->on_read = NULL;
  } else {
    for (size_t i = 0; i < slices->count; i++) {
      grpc_slice_buffer_add(&m->read_buffer,
                            grpc_slice_copy(slices->slices[i]));
    }
  }
  gpr_mu_unlock(&m->parent->mu);
  GRPC_CLOSURE_SCHED(exec_ctx, cb, error);
}