@@ -41,11 +41,22 @@ class RequestBase {
41
41
virtual ~RequestBase () {}
42
42
virtual void Process () = 0;
43
43
44
- CallStatus Status () { return status_; }
45
- void SetStatus (CallStatus status) { status_ = status; }
44
+ CallStatus Status () const {
45
+ std::lock_guard<std::mutex> l (status_mu_);
46
+ return status_;
47
+ }
48
+
49
+ template <typename T>
50
+ void Finish (const T& reply, ServerAsyncResponseWriter<T>* responder) {
51
+ std::lock_guard<std::mutex> l (status_mu_);
52
+ status_ = FINISH;
53
+ responder->Finish (reply, ::grpc::Status::OK,
54
+ reinterpret_cast <void *>(static_cast <intptr_t >(req_id_)));
55
+ }
46
56
virtual std::string GetReqName () = 0;
47
57
48
58
protected:
59
+ mutable std::mutex status_mu_;
49
60
::grpc::ServerContext ctx_;
50
61
GrpcService::AsyncService* service_;
51
62
::grpc::ServerCompletionQueue* cq_;
@@ -80,9 +91,7 @@ class RequestSend final : public RequestBase {
80
91
framework::Variable* outvar = nullptr ;
81
92
82
93
request_handler_->Handle (varname, scope, invar, &outvar);
83
- status_ = FINISH;
84
- responder_.Finish (reply_, ::grpc::Status::OK,
85
- reinterpret_cast <void *>(static_cast <intptr_t >(req_id_)));
94
+ Finish (reply_, &responder_);
86
95
}
87
96
88
97
protected:
@@ -122,9 +131,7 @@ class RequestGet final : public RequestBase {
122
131
SerializeToByteBuffer (varname, outvar, *request_handler_->dev_ctx (),
123
132
&reply_);
124
133
}
125
- status_ = FINISH;
126
- responder_.Finish (reply_, ::grpc::Status::OK,
127
- reinterpret_cast <void *>(static_cast <intptr_t >(req_id_)));
134
+ Finish (reply_, &responder_);
128
135
}
129
136
130
137
protected:
@@ -166,9 +173,7 @@ class RequestPrefetch final : public RequestBase {
166
173
167
174
SerializeToByteBuffer (varname, outvar, *request_handler_->dev_ctx (),
168
175
&reply_);
169
- responder_.Finish (reply_, ::grpc::Status::OK,
170
- reinterpret_cast <void *>(static_cast <intptr_t >(req_id_)));
171
- status_ = FINISH;
176
+ Finish (reply_, &responder_);
172
177
}
173
178
174
179
protected:
0 commit comments