in source/event_stream_rpc_client.c [401:457]
static void s_on_protocol_message_written_fn(
struct aws_event_stream_message *message,
int error_code,
void *user_data) {
(void)message;
struct event_stream_connection_send_message_args *message_args = user_data;
AWS_LOGF_TRACE(
AWS_LS_EVENT_STREAM_RPC_CLIENT,
"id=%p: message %p flushed to channel.",
(void *)message_args->connection,
(void *)message);
if (message_args->message_type == AWS_EVENT_STREAM_RPC_MESSAGE_TYPE_CONNECT) {
AWS_LOGF_TRACE(
AWS_LS_EVENT_STREAM_RPC_CLIENT,
"id=%p: connect message flushed to the wire.",
(void *)message_args->connection);
}
if (message_args->end_stream) {
AWS_LOGF_DEBUG(
AWS_LS_EVENT_STREAM_RPC_CLIENT,
"id=%p: the end stream flag was set, closing continuation %p.",
(void *)message_args->connection,
(void *)message_args->continuation);
AWS_FATAL_ASSERT(message_args->continuation && "end stream flag was set but it wasn't on a continuation");
aws_atomic_store_int(&message_args->continuation->is_closed, 1U);
aws_mutex_lock(&message_args->connection->stream_lock);
aws_hash_table_remove(
&message_args->connection->continuation_table, &message_args->continuation->stream_id, NULL, NULL);
aws_mutex_unlock(&message_args->connection->stream_lock);
/* Lock must NOT be held while invoking callback */
s_complete_continuation(message_args->continuation);
}
message_args->flush_fn(error_code, message_args->user_data);
if (message_args->terminate_connection) {
AWS_LOGF_DEBUG(
AWS_LS_EVENT_STREAM_RPC_CLIENT,
"id=%p: terminate_connection flag was specified. Shutting down the connection.",
(void *)message_args->connection);
aws_event_stream_rpc_client_connection_close(message_args->connection, AWS_ERROR_SUCCESS);
}
aws_event_stream_rpc_client_connection_release(message_args->connection);
if (message_args->continuation) {
aws_event_stream_rpc_client_continuation_release(message_args->continuation);
}
aws_event_stream_message_clean_up(&message_args->message);
aws_mem_release(message_args->allocator, message_args);
}