Skip to content

Commit f41d2b5

Browse files
committed
move shared_ptr instead of copying them, when constructing DHT observers
1 parent b0c101a commit f41d2b5

13 files changed

+38
-47
lines changed

include/libtorrent/kademlia/direct_request.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ struct direct_traversal : traversal_algorithm
6767

6868
struct direct_observer : observer
6969
{
70-
direct_observer(std::shared_ptr<traversal_algorithm> const& algo
70+
direct_observer(std::shared_ptr<traversal_algorithm> algo
7171
, udp::endpoint const& ep, node_id const& id)
72-
: observer(algo, ep, id)
72+
: observer(std::move(algo), ep, id)
7373
{}
7474

7575
void reply(msg const& m) override

include/libtorrent/kademlia/find_data.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,9 @@ struct find_data : traversal_algorithm
7676
struct find_data_observer : traversal_observer
7777
{
7878
find_data_observer(
79-
std::shared_ptr<traversal_algorithm> const& algorithm
79+
std::shared_ptr<traversal_algorithm> algorithm
8080
, udp::endpoint const& ep, node_id const& id)
81-
: traversal_observer(algorithm, ep, id)
81+
: traversal_observer(std::move(algorithm), ep, id)
8282
{}
8383

8484
void reply(msg const&) override;

include/libtorrent/kademlia/get_item.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@ class get_item_observer : public find_data_observer
8080
{
8181
public:
8282
get_item_observer(
83-
std::shared_ptr<traversal_algorithm> const& algorithm
83+
std::shared_ptr<traversal_algorithm> algorithm
8484
, udp::endpoint const& ep, node_id const& id)
85-
: find_data_observer(algorithm, ep, id)
85+
: find_data_observer(std::move(algorithm), ep, id)
8686
{}
8787

8888
void reply(msg const&) override;

include/libtorrent/kademlia/get_peers.hpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ struct obfuscated_get_peers : get_peers
8585
struct get_peers_observer : find_data_observer
8686
{
8787
get_peers_observer(
88-
std::shared_ptr<traversal_algorithm> const& algorithm
88+
std::shared_ptr<traversal_algorithm> algorithm
8989
, udp::endpoint const& ep, node_id const& id)
90-
: find_data_observer(algorithm, ep, id)
90+
: find_data_observer(std::move(algorithm), ep, id)
9191
{}
9292

9393
void reply(msg const&) override;
@@ -100,9 +100,9 @@ struct get_peers_observer : find_data_observer
100100
struct obfuscated_get_peers_observer : traversal_observer
101101
{
102102
obfuscated_get_peers_observer(
103-
std::shared_ptr<traversal_algorithm> const& algorithm
103+
std::shared_ptr<traversal_algorithm> algorithm
104104
, udp::endpoint const& ep, node_id const& id)
105-
: traversal_observer(algorithm, ep, id)
105+
: traversal_observer(std::move(algorithm), ep, id)
106106
{}
107107
void reply(msg const&) override;
108108
};

include/libtorrent/kademlia/node.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,9 @@ TORRENT_EXTRA_EXPORT entry write_nodes_entry(std::vector<node_entry> const& node
6868
class announce_observer : public observer
6969
{
7070
public:
71-
announce_observer(std::shared_ptr<traversal_algorithm> const& algo
71+
announce_observer(std::shared_ptr<traversal_algorithm> algo
7272
, udp::endpoint const& ep, node_id const& id)
73-
: observer(algo, ep, id)
73+
: observer(std::move(algo), ep, id)
7474
{}
7575

7676
void reply(msg const&) override { flags |= flag_done; }

include/libtorrent/kademlia/observer.hpp

+10-20
Original file line numberDiff line numberDiff line change
@@ -54,22 +54,12 @@ using observer_flags_t = libtorrent::flags::bitfield_flag<std::uint8_t, observer
5454
struct TORRENT_EXTRA_EXPORT observer
5555
: std::enable_shared_from_this<observer>
5656
{
57-
observer(std::shared_ptr<traversal_algorithm> const& a
57+
observer(std::shared_ptr<traversal_algorithm> a
5858
, udp::endpoint const& ep, node_id const& id)
59-
: m_sent()
60-
, m_algorithm(a)
59+
: m_algorithm(std::move(a))
6160
, m_id(id)
62-
, m_port(0)
63-
, m_transaction_id()
64-
, flags{}
6561
{
66-
TORRENT_ASSERT(a);
67-
#if TORRENT_USE_ASSERTS
68-
m_in_constructor = true;
69-
m_was_sent = false;
70-
m_was_abandoned = false;
71-
m_in_use = true;
72-
#endif
62+
TORRENT_ASSERT(m_algorithm);
7363
set_target(ep);
7464
}
7565

@@ -149,18 +139,18 @@ struct TORRENT_EXTRA_EXPORT observer
149139
address_v4::bytes_type v4;
150140
} m_addr;
151141

152-
std::uint16_t m_port;
142+
std::uint16_t m_port = 0;
153143

154144
// the transaction ID for this call
155-
std::uint16_t m_transaction_id;
145+
std::uint16_t m_transaction_id = 0;
156146
public:
157-
observer_flags_t flags;
147+
observer_flags_t flags{};
158148

159149
#if TORRENT_USE_ASSERTS
160-
bool m_in_constructor:1;
161-
bool m_was_sent:1;
162-
bool m_was_abandoned:1;
163-
bool m_in_use:1;
150+
bool m_in_constructor = true;
151+
bool m_was_sent = false;
152+
bool m_was_abandoned = false;
153+
bool m_in_use = true;
164154
#endif
165155
};
166156

include/libtorrent/kademlia/put_data.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,9 @@ struct put_data: traversal_algorithm
7171
struct put_data_observer : traversal_observer
7272
{
7373
put_data_observer(
74-
std::shared_ptr<traversal_algorithm> const& algorithm
74+
std::shared_ptr<traversal_algorithm> algorithm
7575
, udp::endpoint const& ep, node_id const& id, std::string const& token)
76-
: traversal_observer(algorithm, ep, id)
76+
: traversal_observer(std::move(algorithm), ep, id)
7777
, m_token(token)
7878
{
7979
}

include/libtorrent/kademlia/rpc_manager.hpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,9 @@ struct socket_manager;
5757

5858
struct TORRENT_EXTRA_EXPORT null_observer : observer
5959
{
60-
null_observer(std::shared_ptr<traversal_algorithm> const& a
61-
, udp::endpoint const& ep, node_id const& id): observer(a, ep, id) {}
60+
null_observer(std::shared_ptr<traversal_algorithm> a
61+
, udp::endpoint const& ep, node_id const& id)
62+
: observer(std::move(a), ep, id) {}
6263
void reply(msg const&) override { flags |= flag_done; }
6364
};
6465

include/libtorrent/kademlia/sample_infohashes.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class sample_infohashes_observer final : public traversal_observer
6868
{
6969
public:
7070

71-
sample_infohashes_observer(std::shared_ptr<traversal_algorithm> const& algorithm
71+
sample_infohashes_observer(std::shared_ptr<traversal_algorithm> algorithm
7272
, udp::endpoint const& ep, node_id const& id);
7373

7474
void reply(msg const&) override;

include/libtorrent/kademlia/traversal_algorithm.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,9 @@ void look_for_nodes(char const* nodes_key, udp const& protocol
156156
struct traversal_observer : observer
157157
{
158158
traversal_observer(
159-
std::shared_ptr<traversal_algorithm> const& algorithm
159+
std::shared_ptr<traversal_algorithm> algorithm
160160
, udp::endpoint const& ep, node_id const& id)
161-
: observer(algorithm, ep, id)
161+
: observer(std::move(algorithm), ep, id)
162162
{}
163163

164164
// parses out "nodes" and keeps traversing

src/kademlia/node.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ void node::direct_request(udp::endpoint const& ep, entry& e
463463
// not really a traversal
464464
auto algo = std::make_shared<direct_traversal>(*this, node_id(), f);
465465

466-
auto o = m_rpc.allocate_observer<direct_observer>(algo, ep, node_id());
466+
auto o = m_rpc.allocate_observer<direct_observer>(std::move(algo), ep, node_id());
467467
if (!o) return;
468468
#if TORRENT_USE_ASSERTS
469469
o->m_in_constructor = false;
@@ -603,9 +603,9 @@ void node::sample_infohashes(udp::endpoint const& ep, sha1_hash const& target
603603
struct ping_observer : observer
604604
{
605605
ping_observer(
606-
std::shared_ptr<traversal_algorithm> const& algorithm
606+
std::shared_ptr<traversal_algorithm> algorithm
607607
, udp::endpoint const& ep, node_id const& id)
608-
: observer(algorithm, ep, id)
608+
: observer(std::move(algorithm), ep, id)
609609
{}
610610

611611
// parses out "nodes"
@@ -675,8 +675,8 @@ void node::send_single_refresh(udp::endpoint const& ep, int const bucket
675675
target |= m_id & mask;
676676

677677
// create a dummy traversal_algorithm
678-
auto const algo = std::make_shared<traversal_algorithm>(*this, node_id());
679-
auto o = m_rpc.allocate_observer<ping_observer>(algo, ep, id);
678+
auto algo = std::make_shared<traversal_algorithm>(*this, node_id());
679+
auto o = m_rpc.allocate_observer<ping_observer>(std::move(algo), ep, id);
680680
if (!o) return;
681681
#if TORRENT_USE_ASSERTS
682682
o->m_in_constructor = false;

src/kademlia/sample_infohashes.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ void sample_infohashes::got_samples(time_duration interval
6262
}
6363

6464
sample_infohashes_observer::sample_infohashes_observer(
65-
std::shared_ptr<traversal_algorithm> const& algorithm
65+
std::shared_ptr<traversal_algorithm> algorithm
6666
, udp::endpoint const& ep, node_id const& id)
67-
: traversal_observer(algorithm, ep, id) {}
67+
: traversal_observer(std::move(algorithm), ep, id) {}
6868

6969
void sample_infohashes_observer::reply(msg const& m)
7070
{

test/test_dht.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -3372,7 +3372,7 @@ TORRENT_TEST(rpc_invalid_error_msg)
33723372
g_sent_packets.clear();
33733373
auto algo = std::make_shared<dht::traversal_algorithm>(node, node_id());
33743374

3375-
auto o = rpc.allocate_observer<null_observer>(algo, source, node_id());
3375+
auto o = rpc.allocate_observer<null_observer>(std::move(algo), source, node_id());
33763376
#if TORRENT_USE_ASSERTS
33773377
o->m_in_constructor = false;
33783378
#endif

0 commit comments

Comments
 (0)