|  | @@ -64,7 +64,7 @@ class ClientAsyncStreamingInterface {
 | 
	
		
			
				|  |  |    ///     earlier call to \a AsyncReaderInterface::Read that yielded a failed
 | 
	
		
			
				|  |  |    ///     result, e.g. cq->Next(&read_tag, &ok) filled in 'ok' with 'false').
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  | -  /// This function will return when either:
 | 
	
		
			
				|  |  | +  /// The tag will be returned when either:
 | 
	
		
			
				|  |  |    /// - all incoming messages have been read and the server has returned
 | 
	
		
			
				|  |  |    ///   a status.
 | 
	
		
			
				|  |  |    /// - the server has returned a non-OK status.
 | 
	
	
		
			
				|  | @@ -112,6 +112,8 @@ class AsyncWriterInterface {
 | 
	
		
			
				|  |  |    /// Only one write may be outstanding at any given time. This means that
 | 
	
		
			
				|  |  |    /// after calling Write, one must wait to receive \a tag from the completion
 | 
	
		
			
				|  |  |    /// queue BEFORE calling Write again.
 | 
	
		
			
				|  |  | +  /// GRPC doesn't take ownership or a reference to \a msg, so it is safe to
 | 
	
		
			
				|  |  | +  /// to deallocate once Write returns.
 | 
	
		
			
				|  |  |    /// This is thread-safe with respect to \a AsyncReaderInterface::Read
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  |    /// \param[in] msg The message to be written.
 | 
	
	
		
			
				|  | @@ -124,6 +126,8 @@ class AsyncWriterInterface {
 | 
	
		
			
				|  |  |    /// Only one write may be outstanding at any given time. This means that
 | 
	
		
			
				|  |  |    /// after calling Write, one must wait to receive \a tag from the completion
 | 
	
		
			
				|  |  |    /// queue BEFORE calling Write again.
 | 
	
		
			
				|  |  | +  /// GRPC doesn't take ownership or a reference to \a msg, so it is safe to
 | 
	
		
			
				|  |  | +  /// to deallocate once Write returns.
 | 
	
		
			
				|  |  |    /// WriteOptions \a options is used to set the write options of this message.
 | 
	
		
			
				|  |  |    /// This is thread-safe with respect to \a AsyncReaderInterface::Read
 | 
	
		
			
				|  |  |    ///
 | 
	
	
		
			
				|  | @@ -143,6 +147,8 @@ class AsyncWriterInterface {
 | 
	
		
			
				|  |  |    /// and write is initiated. Note that WriteLast can only buffer \a msg up to
 | 
	
		
			
				|  |  |    /// the flow control window size. If \a msg size is larger than the window
 | 
	
		
			
				|  |  |    /// size, it will be sent on wire without buffering.
 | 
	
		
			
				|  |  | +  /// GRPC doesn't take ownership or a reference to \a msg, so it is safe to
 | 
	
		
			
				|  |  | +  /// to deallocate once Write returns.
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  |    /// \param[in] msg The message to be written.
 | 
	
		
			
				|  |  |    /// \param[in] options The WriteOptions to be used to write this message.
 | 
	
	
		
			
				|  | @@ -629,6 +635,8 @@ class ServerAsyncReaderInterface
 | 
	
		
			
				|  |  |    /// This operation will end when the server has finished sending out initial
 | 
	
		
			
				|  |  |    /// metadata (if not sent already), response message, and status, or if
 | 
	
		
			
				|  |  |    /// some failure occurred when trying to do so.
 | 
	
		
			
				|  |  | +  /// GRPC doesn't take ownership or a reference to \a msg or \a status, so it
 | 
	
		
			
				|  |  | +  /// is safe to to deallocate once Finish returns.
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  |    /// \param[in] tag Tag identifying this request.
 | 
	
		
			
				|  |  |    /// \param[in] status To be sent to the client as the result of this call.
 | 
	
	
		
			
				|  | @@ -650,6 +658,9 @@ class ServerAsyncReaderInterface
 | 
	
		
			
				|  |  |    /// metadata (if not sent already), and status, or if some failure occurred
 | 
	
		
			
				|  |  |    /// when trying to do so.
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  | +  /// GRPC doesn't take ownership or a reference to \a status, so it is safe to
 | 
	
		
			
				|  |  | +  /// to deallocate once FinishWithError returns.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  |    /// \param[in] tag Tag identifying this request.
 | 
	
		
			
				|  |  |    /// \param[in] status To be sent to the client as the result of this call.
 | 
	
		
			
				|  |  |    ///     - Note: \a status must have a non-OK code.
 | 
	
	
		
			
				|  | @@ -697,6 +708,9 @@ class ServerAsyncReader final : public ServerAsyncReaderInterface<W, R> {
 | 
	
		
			
				|  |  |    ///     initial and trailing metadata.
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  |    /// Note: \a msg is not sent if \a status has a non-OK code.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  | +  /// GRPC doesn't take ownership or a reference to \a msg and \a status, so it
 | 
	
		
			
				|  |  | +  /// is safe to to deallocate once Finish returns.
 | 
	
		
			
				|  |  |    void Finish(const W& msg, const Status& status, void* tag) override {
 | 
	
		
			
				|  |  |      finish_ops_.set_output_tag(tag);
 | 
	
		
			
				|  |  |      if (!ctx_->sent_initial_metadata_) {
 | 
	
	
		
			
				|  | @@ -723,6 +737,9 @@ class ServerAsyncReader final : public ServerAsyncReaderInterface<W, R> {
 | 
	
		
			
				|  |  |    ///   - also sends initial metadata if not alreay sent.
 | 
	
		
			
				|  |  |    ///   - uses the \a ServerContext associated with this call to send possible
 | 
	
		
			
				|  |  |    ///     initial and trailing metadata.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  | +  /// GRPC doesn't take ownership or a reference to \a status, so it is safe to
 | 
	
		
			
				|  |  | +  /// to deallocate once FinishWithError returns.
 | 
	
		
			
				|  |  |    void FinishWithError(const Status& status, void* tag) override {
 | 
	
		
			
				|  |  |      GPR_CODEGEN_ASSERT(!status.ok());
 | 
	
		
			
				|  |  |      finish_ops_.set_output_tag(tag);
 | 
	
	
		
			
				|  | @@ -773,6 +790,9 @@ class ServerAsyncWriterInterface
 | 
	
		
			
				|  |  |    /// metadata (if not sent already), response message, and status, or if
 | 
	
		
			
				|  |  |    /// some failure occurred when trying to do so.
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  | +  /// GRPC doesn't take ownership or a reference to \a status, so it is safe to
 | 
	
		
			
				|  |  | +  /// to deallocate once Finish returns.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  |    /// \param[in] tag Tag identifying this request.
 | 
	
		
			
				|  |  |    /// \param[in] status To be sent to the client as the result of this call.
 | 
	
		
			
				|  |  |    virtual void Finish(const Status& status, void* tag) = 0;
 | 
	
	
		
			
				|  | @@ -784,6 +804,9 @@ class ServerAsyncWriterInterface
 | 
	
		
			
				|  |  |    /// WriteAndFinish is equivalent of performing WriteLast and Finish
 | 
	
		
			
				|  |  |    /// in a single step.
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  | +  /// GRPC doesn't take ownership or a reference to \a msg and \a status, so it
 | 
	
		
			
				|  |  | +  /// is safe to to deallocate once WriteAndFinish returns.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  |    /// \param[in] msg The message to be written.
 | 
	
		
			
				|  |  |    /// \param[in] options The WriteOptions to be used to write this message.
 | 
	
		
			
				|  |  |    /// \param[in] status The Status that server returns to client.
 | 
	
	
		
			
				|  | @@ -847,6 +870,9 @@ class ServerAsyncWriter final : public ServerAsyncWriterInterface<W> {
 | 
	
		
			
				|  |  |    ///     for sending trailing (and initial) metadata to the client.
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  |    /// Note: \a status must have an OK code.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  | +  /// GRPC doesn't take ownership or a reference to \a msg and \a status, so it
 | 
	
		
			
				|  |  | +  /// is safe to to deallocate once WriteAndFinish returns.
 | 
	
		
			
				|  |  |    void WriteAndFinish(const W& msg, WriteOptions options, const Status& status,
 | 
	
		
			
				|  |  |                        void* tag) override {
 | 
	
		
			
				|  |  |      write_ops_.set_output_tag(tag);
 | 
	
	
		
			
				|  | @@ -865,6 +891,9 @@ class ServerAsyncWriter final : public ServerAsyncWriterInterface<W> {
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  |    /// Note: there are no restrictions are the code of
 | 
	
		
			
				|  |  |    /// \a status,it may be non-OK
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  | +  /// GRPC doesn't take ownership or a reference to \a status, so it is safe to
 | 
	
		
			
				|  |  | +  /// to deallocate once Finish returns.
 | 
	
		
			
				|  |  |    void Finish(const Status& status, void* tag) override {
 | 
	
		
			
				|  |  |      finish_ops_.set_output_tag(tag);
 | 
	
		
			
				|  |  |      EnsureInitialMetadataSent(&finish_ops_);
 | 
	
	
		
			
				|  | @@ -924,6 +953,9 @@ class ServerAsyncReaderWriterInterface
 | 
	
		
			
				|  |  |    /// metadata (if not sent already), response message, and status, or if some
 | 
	
		
			
				|  |  |    /// failure occurred when trying to do so.
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  | +  /// GRPC doesn't take ownership or a reference to \a status, so it is safe to
 | 
	
		
			
				|  |  | +  /// to deallocate once Finish returns.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  |    /// \param[in] tag Tag identifying this request.
 | 
	
		
			
				|  |  |    /// \param[in] status To be sent to the client as the result of this call.
 | 
	
		
			
				|  |  |    virtual void Finish(const Status& status, void* tag) = 0;
 | 
	
	
		
			
				|  | @@ -935,6 +967,9 @@ class ServerAsyncReaderWriterInterface
 | 
	
		
			
				|  |  |    /// WriteAndFinish is equivalent of performing WriteLast and Finish in a
 | 
	
		
			
				|  |  |    /// single step.
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  | +  /// GRPC doesn't take ownership or a reference to \a msg and \a status, so it
 | 
	
		
			
				|  |  | +  /// is safe to to deallocate once WriteAndFinish returns.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  |    /// \param[in] msg The message to be written.
 | 
	
		
			
				|  |  |    /// \param[in] options The WriteOptions to be used to write this message.
 | 
	
		
			
				|  |  |    /// \param[in] status The Status that server returns to client.
 | 
	
	
		
			
				|  | @@ -1006,6 +1041,9 @@ class ServerAsyncReaderWriter final
 | 
	
		
			
				|  |  |    ///     for sending trailing (and initial) metadata to the client.
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  |    /// Note: \a status must have an OK code.
 | 
	
		
			
				|  |  | +  //
 | 
	
		
			
				|  |  | +  /// GRPC doesn't take ownership or a reference to \a msg and \a status, so it
 | 
	
		
			
				|  |  | +  /// is safe to to deallocate once WriteAndFinish returns.
 | 
	
		
			
				|  |  |    void WriteAndFinish(const W& msg, WriteOptions options, const Status& status,
 | 
	
		
			
				|  |  |                        void* tag) override {
 | 
	
		
			
				|  |  |      write_ops_.set_output_tag(tag);
 | 
	
	
		
			
				|  | @@ -1024,6 +1062,9 @@ class ServerAsyncReaderWriter final
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  |    /// Note: there are no restrictions are the code of \a status,
 | 
	
		
			
				|  |  |    /// it may be non-OK
 | 
	
		
			
				|  |  | +  //
 | 
	
		
			
				|  |  | +  /// GRPC doesn't take ownership or a reference to \a status, so it is safe to
 | 
	
		
			
				|  |  | +  /// to deallocate once Finish returns.
 | 
	
		
			
				|  |  |    void Finish(const Status& status, void* tag) override {
 | 
	
		
			
				|  |  |      finish_ops_.set_output_tag(tag);
 | 
	
		
			
				|  |  |      EnsureInitialMetadataSent(&finish_ops_);
 |