| | |
| | | */ |
| | | #include "failed_msg.h" |
| | | |
| | | FailedMsgQ::Func FailedMsgQ::PrepareSender(const std::string &remote, Msg const &msg) |
| | | FailedMsgQ::Func FailedMsgQ::PrepareSender(const std::string &remote, Msg msg) |
| | | { |
| | | msg.AddRef(); |
| | | return [remote, msg](void *valid_sock) { |
| | | return [remote, msg](void *valid_sock) mutable { |
| | | assert(valid_sock); |
| | | ShmSocket &sock = *static_cast<ShmSocket *>(valid_sock); |
| | | bool r = sock.Send(remote.data(), msg); |
| | | //TODO check remote removed. |
| | | if (r && msg.IsCounted()) { |
| | | auto tmp = msg; // Release() is not const, but it's safe to release. |
| | | tmp.Release(sock.shm()); |
| | | } |
| | | return r; |
| | | DEFER1(msg.Release(sock.shm())); // Release() is not const, but it's safe to release. |
| | | return sock.Send(remote.data(), msg); |
| | | }; |
| | | } |