From c36370ef60ae4f8c1ed251a404ccddff671194a1 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Thu, 4 Jul 2013 00:56:29 +0900 Subject: [PATCH] Use std::unique_ptr for LpdMessage instead of std::shared_ptr --- src/LpdMessageReceiver.cc | 16 +++++++--------- src/LpdMessageReceiver.h | 2 +- src/LpdReceiveMessageCommand.cc | 12 ++++++------ test/LpdMessageReceiverTest.cc | 2 +- 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/LpdMessageReceiver.cc b/src/LpdMessageReceiver.cc index 20d9f02a..c785f0cd 100644 --- a/src/LpdMessageReceiver.cc +++ b/src/LpdMessageReceiver.cc @@ -55,7 +55,7 @@ LpdMessageReceiver::~LpdMessageReceiver() {} bool LpdMessageReceiver::init(const std::string& localAddr) { try { - socket_.reset(new SocketCore(SOCK_DGRAM)); + socket_ = std::make_shared(SOCK_DGRAM); #ifdef __MINGW32__ // Binding multicast address fails under Windows. socket_->bindWithFamily(multicastPort_, AF_INET); @@ -77,9 +77,8 @@ bool LpdMessageReceiver::init(const std::string& localAddr) return false; } -std::shared_ptr LpdMessageReceiver::receiveMessage() +std::unique_ptr LpdMessageReceiver::receiveMessage() { - std::shared_ptr msg; while(1) { unsigned char buf[200]; std::pair peerAddr; @@ -87,11 +86,11 @@ std::shared_ptr LpdMessageReceiver::receiveMessage() try { length = socket_->readDataFrom(buf, sizeof(buf), peerAddr); if(length == 0) { - return msg; + return std::unique_ptr{}; } } catch(RecoverableException& e) { A2_LOG_INFO_EX("Failed to receive LPD message.", e); - return msg; + return std::unique_ptr{}; } HttpHeaderProcessor proc(HttpHeaderProcessor::SERVER_PARSER); try { @@ -103,7 +102,7 @@ std::shared_ptr LpdMessageReceiver::receiveMessage() A2_LOG_INFO_EX("Failed to parse LPD message.", e); continue; } - const std::shared_ptr& header = proc.getResult(); + auto header = proc.getResult(); const std::string& infoHashString = header->find(HttpHeader::INFOHASH); uint32_t port = 0; if(!util::parseUIntNoThrow(port, header->find(HttpHeader::PORT)) || @@ -123,12 +122,11 @@ std::shared_ptr LpdMessageReceiver::receiveMessage() infoHashString.c_str())); continue; } - std::shared_ptr peer(new Peer(peerAddr.first, port, false)); + auto peer = std::make_shared(peerAddr.first, port, false); if(util::inPrivateAddress(peerAddr.first)) { peer->setLocalPeer(true); } - msg.reset(new LpdMessage(peer, infoHash)); - return msg; + return make_unique(peer, infoHash); } } diff --git a/src/LpdMessageReceiver.h b/src/LpdMessageReceiver.h index 40369508..34d95f6a 100644 --- a/src/LpdMessageReceiver.h +++ b/src/LpdMessageReceiver.h @@ -63,7 +63,7 @@ public: // sender(peer) and infohash. If no data is available on socket, // returns std::shared_ptr(). If received data is bad, // then returns std::shared_ptr(new LpdMessage()) - std::shared_ptr receiveMessage(); + std::unique_ptr receiveMessage(); const std::shared_ptr& getSocket() const { diff --git a/src/LpdReceiveMessageCommand.cc b/src/LpdReceiveMessageCommand.cc index e0f11715..a685e8a3 100644 --- a/src/LpdReceiveMessageCommand.cc +++ b/src/LpdReceiveMessageCommand.cc @@ -73,12 +73,12 @@ bool LpdReceiveMessageCommand::execute() return true; } for(size_t i = 0; i < 20; ++i) { - std::shared_ptr m = receiver_->receiveMessage(); + auto m = receiver_->receiveMessage(); if(!m) { break; } - std::shared_ptr reg = e_->getBtRegistry(); - std::shared_ptr dctx = reg->getDownloadContext(m->infoHash); + auto& reg = e_->getBtRegistry(); + auto& dctx = reg->getDownloadContext(m->infoHash); if(!dctx) { A2_LOG_DEBUG(fmt("Download Context is null for infohash=%s.", util::toHex(m->infoHash).c_str())); @@ -90,11 +90,11 @@ bool LpdReceiveMessageCommand::execute() } RequestGroup* group = dctx->getOwnerRequestGroup(); assert(group); - const std::shared_ptr& btobj = reg->get(group->getGID()); + auto& btobj = reg->get(group->getGID()); assert(btobj); - const std::shared_ptr& peerStorage = btobj->peerStorage; + auto& peerStorage = btobj->peerStorage; assert(peerStorage); - std::shared_ptr peer = m->peer; + auto& peer = m->peer; if(peerStorage->addPeer(peer)) { A2_LOG_DEBUG(fmt("LPD peer %s:%u local=%d added.", peer->getIPAddress().c_str(), peer->getPort(), diff --git a/test/LpdMessageReceiverTest.cc b/test/LpdMessageReceiverTest.cc index 26aefc9b..6278586a 100644 --- a/test/LpdMessageReceiverTest.cc +++ b/test/LpdMessageReceiverTest.cc @@ -50,7 +50,7 @@ void LpdMessageReceiverTest::testReceiveMessage() LPD_MULTICAST_ADDR, LPD_MULTICAST_PORT); rcv.getSocket()->isReadable(5); - std::shared_ptr msg = rcv.receiveMessage(); + auto msg = rcv.receiveMessage(); CPPUNIT_ASSERT(msg); CPPUNIT_ASSERT_EQUAL(std::string("cd41c7fdddfd034a15a04d7ff881216e01c4ceaf"), util::toHex(msg->infoHash));