Reset on finalization so op objects can be reused

pull/1969/head
Craig Tiller 10 years ago
parent 3cb03ef0c8
commit 8f789fd4b9
  1. 16
      include/grpc++/impl/call.h

@ -85,7 +85,7 @@ class CallOpSendInitialMetadata {
op->data.send_initial_metadata.metadata = initial_metadata_; op->data.send_initial_metadata.metadata = initial_metadata_;
} }
void FinishOp(bool* status, int max_message_size) { void FinishOp(bool* status, int max_message_size) {
// nothing to do send_ = false;
} }
bool send_; bool send_;
@ -109,6 +109,7 @@ class CallOpSendMessage {
} }
void FinishOp(bool* status, int max_message_size) { void FinishOp(bool* status, int max_message_size) {
if (own_buf_) grpc_byte_buffer_destroy(send_buf_); if (own_buf_) grpc_byte_buffer_destroy(send_buf_);
send_buf_ = nullptr;
} }
private: private:
@ -154,6 +155,7 @@ class CallOpRecvMessage {
got_message = false; got_message = false;
*status = false; *status = false;
} }
message_ = nullptr;
} }
private: private:
@ -198,10 +200,12 @@ class CallOpGenericRecvMessage {
got_message = false; got_message = false;
*status = false; *status = false;
} }
deserialize_ = DeserializeFunc();
} }
private: private:
std::function<Status(grpc_byte_buffer*, int)> deserialize_; typedef std::function<Status(grpc_byte_buffer*, int)> DeserializeFunc;
DeserializeFunc deserialize_;
grpc_byte_buffer* recv_buf_; grpc_byte_buffer* recv_buf_;
}; };
@ -217,7 +221,7 @@ class CallOpClientSendClose {
ops[(*nops)++].op = GRPC_OP_SEND_CLOSE_FROM_CLIENT; ops[(*nops)++].op = GRPC_OP_SEND_CLOSE_FROM_CLIENT;
} }
void FinishOp(bool* status, int max_message_size) { void FinishOp(bool* status, int max_message_size) {
// nothing to do send_ = false;
} }
private: private:
@ -251,7 +255,7 @@ class CallOpServerSendStatus {
} }
void FinishOp(bool* status, int max_message_size) { void FinishOp(bool* status, int max_message_size) {
// nothing to do send_status_details_ = false;
} }
private: private:
@ -281,7 +285,9 @@ class CallOpRecvInitialMetadata {
op->data.recv_initial_metadata = &recv_initial_metadata_arr_; op->data.recv_initial_metadata = &recv_initial_metadata_arr_;
} }
void FinishOp(bool* status, int max_message_size) { void FinishOp(bool* status, int max_message_size) {
if (recv_initial_metadata_ == nullptr) return;
FillMetadataMap(&recv_initial_metadata_arr_, recv_initial_metadata_); FillMetadataMap(&recv_initial_metadata_arr_, recv_initial_metadata_);
recv_initial_metadata_ = nullptr;
} }
private: private:
@ -312,10 +318,12 @@ class CallOpClientRecvStatus {
} }
void FinishOp(bool* status, int max_message_size) { void FinishOp(bool* status, int max_message_size) {
if (recv_status_ == nullptr) return;
FillMetadataMap(&recv_trailing_metadata_arr_, recv_trailing_metadata_); FillMetadataMap(&recv_trailing_metadata_arr_, recv_trailing_metadata_);
*recv_status_ = Status( *recv_status_ = Status(
static_cast<StatusCode>(status_code_), static_cast<StatusCode>(status_code_),
status_details_ ? grpc::string(status_details_) : grpc::string()); status_details_ ? grpc::string(status_details_) : grpc::string());
recv_status_ = nullptr;
} }
private: private:

Loading…
Cancel
Save