diff --git a/libi2pd/SSU2.cpp b/libi2pd/SSU2.cpp index 4293c2d5..80ddbed4 100644 --- a/libi2pd/SSU2.cpp +++ b/libi2pd/SSU2.cpp @@ -391,7 +391,10 @@ namespace transport break; } } - GetService ().post (std::bind (&SSU2Server::HandleReceivedPackets, this, packets)); + GetService ().post ([packets = std::move (packets), this]() mutable + { + HandleReceivedPackets (std::move (packets)); + }); } else GetService ().post (std::bind (&SSU2Server::HandleReceivedPacket, this, packet)); @@ -435,7 +438,7 @@ namespace transport } } - void SSU2Server::HandleReceivedPackets (std::vector packets) + void SSU2Server::HandleReceivedPackets (std::vector&& packets) { if (m_IsThroughProxy) for (auto& packet: packets) @@ -443,7 +446,7 @@ namespace transport else for (auto& packet: packets) ProcessNextPacket (packet->buf, packet->len, packet->from); - m_PacketsPool.ReleaseMt (packets); + m_PacketsPool.ReleaseMt (std::move (packets)); if (m_LastSession && m_LastSession->GetState () != eSSU2SessionStateTerminated) m_LastSession->FlushData (); } diff --git a/libi2pd/SSU2.h b/libi2pd/SSU2.h index 06541010..381b90c8 100644 --- a/libi2pd/SSU2.h +++ b/libi2pd/SSU2.h @@ -126,7 +126,7 @@ namespace transport void HandleReceivedFrom (const boost::system::error_code& ecode, size_t bytes_transferred, Packet * packet, boost::asio::ip::udp::socket& socket); void HandleReceivedPacket (Packet * packet); - void HandleReceivedPackets (std::vector packets); + void HandleReceivedPackets (std::vector&& packets); void ProcessNextPacket (uint8_t * buf, size_t len, const boost::asio::ip::udp::endpoint& senderEndpoint); void ScheduleTermination (); diff --git a/libi2pd/util.h b/libi2pd/util.h index e2037212..dbc69c25 100644 --- a/libi2pd/util.h +++ b/libi2pd/util.h @@ -1,5 +1,5 @@ /* -* Copyright (c) 2013-2022, The PurpleI2P Project +* Copyright (c) 2013-2024, The PurpleI2P Project * * This file is part of Purple i2pd project and licensed under BSD3 * @@ -132,7 +132,7 @@ namespace util } templateclass C, typename... R> - void ReleaseMt(const C& c) + void ReleaseMt(C&& c) { std::lock_guard l(m_Mutex); for (auto& it: c)