Fix memory leak caught by LSAN
This commit is contained in:
parent
25b0a445b9
commit
eee2a7e019
@ -143,7 +143,8 @@ class OpaquePromise {
|
||||
.request_id = opaque_message.request_id,
|
||||
.from_address = opaque_message.from_address};
|
||||
ResponsePromise<T> *promise = static_cast<ResponsePromise<T> *>(this_ptr);
|
||||
promise->Fill(std::move(response_envelope));
|
||||
auto unique_promise = std::unique_ptr<ResponsePromise<T>>(promise);
|
||||
unique_promise->Fill(std::move(response_envelope));
|
||||
}),
|
||||
time_out_([](void *ptr) {
|
||||
ResponseResult<T> result = TimedOut{};
|
||||
@ -163,6 +164,7 @@ class OpaquePromise {
|
||||
void Fill(OpaqueMessage &&opaque_message) {
|
||||
MG_ASSERT(ptr_ != nullptr);
|
||||
fill_(ptr_, std::move(opaque_message));
|
||||
ptr_ = nullptr;
|
||||
}
|
||||
|
||||
~OpaquePromise() {
|
||||
|
@ -26,6 +26,9 @@ using memgraph::utils::BasicResult;
|
||||
|
||||
class SimulatorHandle;
|
||||
|
||||
template <typename I>
|
||||
class Io;
|
||||
|
||||
template <typename T>
|
||||
concept Message = requires(T a, uint8_t *ptr, size_t len) {
|
||||
// These are placeholders and will be replaced
|
||||
@ -56,6 +59,11 @@ struct RequestEnvelope {
|
||||
std::variant<Ms...> message;
|
||||
uint64_t request_id;
|
||||
Address from_address;
|
||||
|
||||
template <Message T, typename I>
|
||||
void Reply(T response, Io<I> &io) {
|
||||
io.Send(from_address, request_id, response);
|
||||
}
|
||||
};
|
||||
|
||||
template <Message... Ms>
|
||||
|
@ -44,17 +44,18 @@ int main() {
|
||||
// send request
|
||||
RequestMsg cli_req;
|
||||
cli_req.data = "hello";
|
||||
ResponseFuture<ResponseMsg> response_future = cli_io.template Request<RequestMsg, ResponseMsg>(srv_addr, cli_req);
|
||||
ResponseFuture<ResponseMsg> response_future = cli_io.Request<RequestMsg, ResponseMsg>(srv_addr, cli_req);
|
||||
|
||||
// receive request
|
||||
RequestResult<RequestMsg> request_result = srv_io.template Receive<RequestMsg>();
|
||||
RequestResult<RequestMsg> request_result = srv_io.Receive<RequestMsg>();
|
||||
auto request_envelope = request_result.GetValue();
|
||||
RequestMsg req = std::get<RequestMsg>(request_envelope.message);
|
||||
|
||||
auto srv_res = ResponseMsg{req.data};
|
||||
|
||||
// send response
|
||||
srv_io.Send(request_envelope.from_address, request_envelope.request_id, srv_res);
|
||||
// srv_io.Send(request_envelope.from_address, request_envelope.request_id, srv_res);
|
||||
request_envelope.Reply(srv_res, srv_io);
|
||||
|
||||
// receive response
|
||||
auto response_result = response_future.Wait();
|
||||
@ -62,5 +63,7 @@ int main() {
|
||||
|
||||
MG_ASSERT(response_envelope.message.data == "hello");
|
||||
|
||||
std::cout << "IT WORKED :)" << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user