From a6b7ef5f0764e07b54bd638ba0ee73dc7ff83e6f Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Fri, 22 Jul 2011 00:41:45 +0900 Subject: [PATCH] Eliminated static variable from LpdReceiveMessageCommand. BtRegistry now holds LpdMessageReceiver. --- src/BtRegistry.cc | 7 +++++++ src/BtRegistry.h | 8 ++++++++ src/BtSetup.cc | 14 +++++++------- src/LpdReceiveMessageCommand.cc | 28 ---------------------------- src/LpdReceiveMessageCommand.h | 23 ++--------------------- 5 files changed, 24 insertions(+), 56 deletions(-) diff --git a/src/BtRegistry.cc b/src/BtRegistry.cc index 883ff4bf..360b86f6 100644 --- a/src/BtRegistry.cc +++ b/src/BtRegistry.cc @@ -41,6 +41,7 @@ #include "BtRuntime.h" #include "BtProgressInfoFile.h" #include "bittorrent_helper.h" +#include "LpdMessageReceiver.h" namespace aria2 { @@ -95,6 +96,12 @@ void BtRegistry::removeAll() { pool_.clear(); } +void BtRegistry::setLpdMessageReceiver +(const SharedHandle& receiver) +{ + lpdMessageReceiver_ = receiver; +} + BtObject::BtObject (const SharedHandle& downloadContext, const SharedHandle& pieceStorage, diff --git a/src/BtRegistry.h b/src/BtRegistry.h index afc000b2..1ea9f44f 100644 --- a/src/BtRegistry.h +++ b/src/BtRegistry.h @@ -50,6 +50,7 @@ class BtAnnounce; class BtRuntime; class BtProgressInfoFile; class DownloadContext; +class LpdMessageReceiver; struct BtObject { SharedHandle downloadContext_; @@ -81,6 +82,7 @@ class BtRegistry { private: std::map pool_; uint16_t tcpPort_; + SharedHandle lpdMessageReceiver_; public: BtRegistry(); ~BtRegistry(); @@ -117,6 +119,12 @@ public: { return tcpPort_; } + + void setLpdMessageReceiver(const SharedHandle& receiver); + const SharedHandle& getLpdMessageReceiver() const + { + return lpdMessageReceiver_; + } }; } // namespace aria2 diff --git a/src/BtSetup.cc b/src/BtSetup.cc index 65ede7e4..7c696670 100644 --- a/src/BtSetup.cc +++ b/src/BtSetup.cc @@ -217,7 +217,7 @@ void BtSetup::setup(std::vector& commands, if(option->getAsBool(PREF_BT_ENABLE_LPD) && btReg->getTcpPort() && (metadataGetMode || !torrentAttrs->privateTorrent)) { - if(LpdReceiveMessageCommand::getNumInstance() == 0) { + if(!btReg->getLpdMessageReceiver()) { A2_LOG_INFO("Initializing LpdMessageReceiver."); SharedHandle receiver (new LpdMessageReceiver(LPD_MULTICAST_ADDR, LPD_MULTICAST_PORT)); @@ -242,30 +242,30 @@ void BtSetup::setup(std::vector& commands, } } if(initialized) { + btReg->setLpdMessageReceiver(receiver); A2_LOG_INFO(fmt("LpdMessageReceiver initialized. multicastAddr=%s:%u," " localAddr=%s", LPD_MULTICAST_ADDR, LPD_MULTICAST_PORT, receiver->getLocalAddress().c_str())); LpdReceiveMessageCommand* cmd = - LpdReceiveMessageCommand::getInstance(e, receiver); + new LpdReceiveMessageCommand(e->newCUID(), receiver, e); e->addCommand(cmd); } else { A2_LOG_INFO("LpdMessageReceiver not initialized."); } } - if(LpdReceiveMessageCommand::getNumInstance()) { + if(btReg->getLpdMessageReceiver()) { const unsigned char* infoHash = bittorrent::getInfoHash(requestGroup->getDownloadContext()); - SharedHandle receiver = - LpdReceiveMessageCommand::getInstance()->getLpdMessageReceiver(); A2_LOG_INFO("Initializing LpdMessageDispatcher."); SharedHandle dispatcher (new LpdMessageDispatcher (std::string(&infoHash[0], &infoHash[INFO_HASH_LENGTH]), btReg->getTcpPort(), LPD_MULTICAST_ADDR, LPD_MULTICAST_PORT)); - if(dispatcher->init(receiver->getLocalAddress(), /*ttl*/1, /*loop*/0)) { - A2_LOG_INFO("LpdMessageDispatcher initialized."); + if(dispatcher->init(btReg->getLpdMessageReceiver()->getLocalAddress(), + /*ttl*/1, /*loop*/0)) { + A2_LOG_INFO("LpdMessageDispatcher initialized."); LpdDispatchMessageCommand* cmd = new LpdDispatchMessageCommand(e->newCUID(), dispatcher, e); cmd->setBtRuntime(btRuntime); diff --git a/src/LpdReceiveMessageCommand.cc b/src/LpdReceiveMessageCommand.cc index 741c6033..166abd89 100644 --- a/src/LpdReceiveMessageCommand.cc +++ b/src/LpdReceiveMessageCommand.cc @@ -51,10 +51,6 @@ namespace aria2 { -unsigned int LpdReceiveMessageCommand::numInstance_ = 0; - -LpdReceiveMessageCommand* LpdReceiveMessageCommand::instance_ = 0; - LpdReceiveMessageCommand::LpdReceiveMessageCommand (cuid_t cuid, const SharedHandle& receiver, @@ -64,16 +60,11 @@ LpdReceiveMessageCommand::LpdReceiveMessageCommand e_(e) { e_->addSocketForReadCheck(receiver_->getSocket(), this); - ++numInstance_; } LpdReceiveMessageCommand::~LpdReceiveMessageCommand() { e_->deleteSocketForReadCheck(receiver_->getSocket(), this); - --numInstance_; - if(numInstance_ == 0) { - instance_ = 0; - } } bool LpdReceiveMessageCommand::execute() @@ -123,23 +114,4 @@ bool LpdReceiveMessageCommand::execute() return false; } -LpdReceiveMessageCommand* -LpdReceiveMessageCommand::getInstance -(DownloadEngine* e, const SharedHandle& receiver) -{ - if(numInstance_ == 0) { - instance_ = new LpdReceiveMessageCommand(e->newCUID(), receiver, e); - } - return instance_; -} - -LpdReceiveMessageCommand* LpdReceiveMessageCommand::getInstance() -{ - if(numInstance_ == 0) { - return 0; - } else { - return instance_; - } -} - } // namespace aria2 diff --git a/src/LpdReceiveMessageCommand.h b/src/LpdReceiveMessageCommand.h index 23f7bfef..dea604a2 100644 --- a/src/LpdReceiveMessageCommand.h +++ b/src/LpdReceiveMessageCommand.h @@ -47,17 +47,11 @@ class SocketCore; class LpdReceiveMessageCommand:public Command { private: SharedHandle receiver_; - - static unsigned int numInstance_; - - static LpdReceiveMessageCommand* instance_; - + DownloadEngine* e_; +public: LpdReceiveMessageCommand (cuid_t cuid, const SharedHandle& receiver, DownloadEngine* e); - - DownloadEngine* e_; -public: virtual ~LpdReceiveMessageCommand(); virtual bool execute(); @@ -66,19 +60,6 @@ public: { return receiver_; } - - static LpdReceiveMessageCommand* - getInstance - (DownloadEngine* e, const SharedHandle& receiver); - - // If numInstance_ is 0, then return 0. If numInstance_ > 0, it - // returns instance_ - static LpdReceiveMessageCommand* getInstance(); - - static unsigned int getNumInstance() - { - return numInstance_; - } }; } // namespace aria2