Esempio n. 1
0
void grpc_chttp2_list_add_written_stream(
    grpc_chttp2_transport_writing *transport_writing,
    grpc_chttp2_stream_writing *stream_writing) {
  stream_list_add(TRANSPORT_FROM_WRITING(transport_writing),
                  STREAM_FROM_WRITING(stream_writing),
                  GRPC_CHTTP2_LIST_WRITTEN);
}
Esempio n. 2
0
void grpc_chttp2_terminate_writing(
    grpc_chttp2_transport_writing *transport_writing, int success) {
  grpc_chttp2_transport *t = TRANSPORT_FROM_WRITING(transport_writing);

  lock(t);

  if (!success) {
    drop_connection(t);
  }

  /* cleanup writing related jazz */
  grpc_chttp2_cleanup_writing(&t->global, &t->writing);

  /* leave the writing flag up on shutdown to prevent further writes in unlock()
     from starting */
  t->writing_active = 0;
  if (t->ep && !t->endpoint_reading) {
    grpc_endpoint_destroy(t->ep);
    t->ep = NULL;
    UNREF_TRANSPORT(
        t, "disconnect"); /* safe because we'll still have the ref for write */
  }

  unlock(t);

  UNREF_TRANSPORT(t, "writing");
}
Esempio n. 3
0
void grpc_chttp2_list_add_stalled_by_transport(
    grpc_chttp2_transport_writing *transport_writing,
    grpc_chttp2_stream_writing *stream_writing) {
  stream_list_add(TRANSPORT_FROM_WRITING(transport_writing),
                  STREAM_FROM_WRITING(stream_writing),
                  GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT);
}
Esempio n. 4
0
int grpc_chttp2_list_add_writing_stream(
    grpc_chttp2_transport_writing *transport_writing,
    grpc_chttp2_stream_writing *stream_writing) {
  return stream_list_add(TRANSPORT_FROM_WRITING(transport_writing),
                         STREAM_FROM_WRITING(stream_writing),
                         GRPC_CHTTP2_LIST_WRITING);
}
Esempio n. 5
0
void grpc_chttp2_terminate_writing(grpc_exec_ctx *exec_ctx,
                                   void *transport_writing_ptr, int success) {
  grpc_chttp2_transport_writing *transport_writing = transport_writing_ptr;
  grpc_chttp2_transport *t = TRANSPORT_FROM_WRITING(transport_writing);

  lock(t);

  allow_endpoint_shutdown_locked(exec_ctx, t);

  if (!success) {
    drop_connection(exec_ctx, t);
  }

  /* cleanup writing related jazz */
  grpc_chttp2_cleanup_writing(exec_ctx, &t->global, &t->writing);

  /* leave the writing flag up on shutdown to prevent further writes in unlock()
     from starting */
  t->writing_active = 0;
  if (t->ep && !t->endpoint_reading) {
    destroy_endpoint(exec_ctx, t);
  }

  unlock(exec_ctx, t);

  UNREF_TRANSPORT(exec_ctx, t, "writing");
}
Esempio n. 6
0
void grpc_chttp2_list_add_stalled_by_transport(
    grpc_chttp2_transport_writing *transport_writing,
    grpc_chttp2_stream_writing *stream_writing) {
  gpr_log(GPR_DEBUG, "stalled %d", stream_writing->id);
  stream_list_add(TRANSPORT_FROM_WRITING(transport_writing),
                  STREAM_FROM_WRITING(stream_writing),
                  GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT);
}
Esempio n. 7
0
int grpc_chttp2_list_pop_writing_stream(
    grpc_chttp2_transport_writing *transport_writing,
    grpc_chttp2_stream_writing **stream_writing) {
  grpc_chttp2_stream *stream;
  int r = stream_list_pop(TRANSPORT_FROM_WRITING(transport_writing), &stream,
                          GRPC_CHTTP2_LIST_WRITING);
  *stream_writing = &stream->writing;
  return r;
}
Esempio n. 8
0
void grpc_chttp2_list_add_writing_stalled_by_transport(
    grpc_chttp2_transport_writing *transport_writing,
    grpc_chttp2_stream_writing *stream_writing) {
  grpc_chttp2_stream *stream = STREAM_FROM_WRITING(stream_writing);
  gpr_log(GPR_DEBUG, "writing stalled %d", stream->global.id);
  if (!stream->included[GRPC_CHTTP2_LIST_WRITING_STALLED_BY_TRANSPORT]) {
    GRPC_CHTTP2_STREAM_REF(&stream->global, "chttp2_writing_stalled");
  }
  stream_list_add(TRANSPORT_FROM_WRITING(transport_writing), stream,
                  GRPC_CHTTP2_LIST_WRITING_STALLED_BY_TRANSPORT);
}
Esempio n. 9
0
int grpc_chttp2_list_pop_written_stream(
    grpc_chttp2_transport_global *transport_global,
    grpc_chttp2_transport_writing *transport_writing,
    grpc_chttp2_stream_global **stream_global,
    grpc_chttp2_stream_writing **stream_writing) {
  grpc_chttp2_stream *stream;
  int r = stream_list_pop(TRANSPORT_FROM_WRITING(transport_writing), &stream,
                          GRPC_CHTTP2_LIST_WRITTEN);
  if (r != 0) {
    *stream_global = &stream->global;
    *stream_writing = &stream->writing;
  }
  return r;
}
Esempio n. 10
0
bool grpc_chttp2_list_flush_writing_stalled_by_transport(
    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_writing *transport_writing) {
  grpc_chttp2_stream *stream;
  bool out = false;
  grpc_chttp2_transport *transport = TRANSPORT_FROM_WRITING(transport_writing);
  while (stream_list_pop(transport, &stream,
                         GRPC_CHTTP2_LIST_WRITING_STALLED_BY_TRANSPORT)) {
    gpr_log(GPR_DEBUG, "move %d from writing stalled to just stalled",
            stream->global.id);
    grpc_chttp2_list_add_stalled_by_transport(transport_writing,
                                              &stream->writing);
    GRPC_CHTTP2_STREAM_UNREF(exec_ctx, &stream->global,
                             "chttp2_writing_stalled");
    out = true;
  }
  return out;
}
Esempio n. 11
0
int grpc_chttp2_list_have_writing_streams(
    grpc_chttp2_transport_writing *transport_writing) {
  return !stream_list_empty(TRANSPORT_FROM_WRITING(transport_writing),
                            GRPC_CHTTP2_LIST_WRITING);
}