Index: head/security/i2pd/Makefile =================================================================== --- head/security/i2pd/Makefile (revision 429359) +++ head/security/i2pd/Makefile (revision 429360) @@ -1,61 +1,61 @@ # Created by: Dmitry Marakasov # $FreeBSD$ PORTNAME= i2pd PORTVERSION= 2.11.0 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= security net-p2p MAINTAINER= amdmi3@FreeBSD.org COMMENT= C++ implementation of I2P client LICENSE= BSD3CLAUSE LICENSE_FILE= ${WRKSRC}/LICENSE LIB_DEPENDS= libboost_thread.so:devel/boost-libs BROKEN_powerpc64= does not build BROKEN_FreeBSD_9= does not build USE_GITHUB= yes GH_ACCOUNT= PurpleI2P USES= cmake compiler:c++11-lib ssl CMAKE_SOURCE_PATH=${WRKSRC}/build USE_RC_SUBR= ${PORTNAME} PORTDOCS= * USERS= _i2pd GROUPS= _i2pd PLIST_SUB= USER="${USERS}" GROUP="${GROUPS}" SUB_LIST= USER="${USERS}" GROUP="${GROUPS}" OPTIONS_DEFINE= AESNI UPNP DOCS AESNI_DESC= Use AES-NI instructions set AESNI_CMAKE_BOOL= WITH_AESNI UPNP_DESC= Include support for UPnP client UPNP_CMAKE_BOOL= WITH_UPNP UPNP_LIB_DEPENDS= libminiupnpc.so:net/miniupnpc .include .if ${SSL_DEFAULT:Mlibressl*} BROKEN= does not build with LibreSSL (boost libressl compatibility problems) .endif do-install: ${INSTALL_PROGRAM} ${WRKSRC}/${PORTNAME} ${STAGEDIR}${PREFIX}/bin ${INSTALL_MAN} ${WRKSRC}/debian/${PORTNAME}.1 ${STAGEDIR}${MAN1PREFIX}/man/man1 @${MKDIR} ${STAGEDIR}/var/run/i2pd @${MKDIR} ${STAGEDIR}/var/log/i2pd @${MKDIR} ${STAGEDIR}/var/db/i2pd do-install-DOCS-on: @${MKDIR} ${STAGEDIR}${DOCSDIR} ${INSTALL_DATA} ${WRKSRC}/README.md ${STAGEDIR}${DOCSDIR} ${INSTALL_DATA} ${WRKSRC}/docs/configuration.md ${STAGEDIR}${DOCSDIR}/ .include Index: head/security/i2pd/files/patch-fix-daemon-option-eating-100-cpu =================================================================== --- head/security/i2pd/files/patch-fix-daemon-option-eating-100-cpu (nonexistent) +++ head/security/i2pd/files/patch-fix-daemon-option-eating-100-cpu (revision 429360) @@ -0,0 +1,204 @@ +commit 442c63d7a4a447a120400fcb3428bfc2c1ec18cc +Author: orignal +Date: Thu Dec 22 13:32:06 2016 -0500 + + #746. initialize io_service after daeminization + +diff --git Transports.cpp Transports.cpp +index 1b9d52a1..b422297f 100644 +--- Transports.cpp ++++ Transports.cpp +@@ -108,8 +108,8 @@ namespace transport + Transports transports; + + Transports::Transports (): +- m_IsOnline (true), m_IsRunning (false), m_Thread (nullptr), m_Work (m_Service), +- m_PeerCleanupTimer (m_Service), m_PeerTestTimer (m_Service), ++ m_IsOnline (true), m_IsRunning (false), m_Thread (nullptr), m_Service (nullptr), ++ m_Work (nullptr), m_PeerCleanupTimer (nullptr), m_PeerTestTimer (nullptr), + m_NTCPServer (nullptr), m_SSUServer (nullptr), m_DHKeysPairSupplier (5), // 5 pre-generated keys + m_TotalSentBytes(0), m_TotalReceivedBytes(0), m_InBandwidth (0), m_OutBandwidth (0), + m_LastInBandwidthUpdateBytes (0), m_LastOutBandwidthUpdateBytes (0), m_LastBandwidthUpdateTime (0) +@@ -119,10 +119,25 @@ namespace transport + Transports::~Transports () + { + Stop (); ++ if (m_Service) ++ { ++ delete m_PeerCleanupTimer; m_PeerCleanupTimer = nullptr; ++ delete m_PeerTestTimer; m_PeerTestTimer = nullptr; ++ delete m_Work; m_Work = nullptr; ++ delete m_Service; m_Service = nullptr; ++ } + } + + void Transports::Start (bool enableNTCP, bool enableSSU) + { ++ if (!m_Service) ++ { ++ m_Service = new boost::asio::io_service (); ++ m_Work = new boost::asio::io_service::work (*m_Service); ++ m_PeerCleanupTimer = new boost::asio::deadline_timer (*m_Service); ++ m_PeerTestTimer = new boost::asio::deadline_timer (*m_Service); ++ } ++ + m_DHKeysPairSupplier.Start (); + m_IsRunning = true; + m_Thread = new std::thread (std::bind (&Transports::Run, this)); +@@ -167,16 +182,16 @@ namespace transport + LogPrint (eLogError, "Transports: SSU server already exists"); + } + } +- m_PeerCleanupTimer.expires_from_now (boost::posix_time::seconds(5*SESSION_CREATION_TIMEOUT)); +- m_PeerCleanupTimer.async_wait (std::bind (&Transports::HandlePeerCleanupTimer, this, std::placeholders::_1)); +- m_PeerTestTimer.expires_from_now (boost::posix_time::minutes(PEER_TEST_INTERVAL)); +- m_PeerTestTimer.async_wait (std::bind (&Transports::HandlePeerTestTimer, this, std::placeholders::_1)); ++ m_PeerCleanupTimer->expires_from_now (boost::posix_time::seconds(5*SESSION_CREATION_TIMEOUT)); ++ m_PeerCleanupTimer->async_wait (std::bind (&Transports::HandlePeerCleanupTimer, this, std::placeholders::_1)); ++ m_PeerTestTimer->expires_from_now (boost::posix_time::minutes(PEER_TEST_INTERVAL)); ++ m_PeerTestTimer->async_wait (std::bind (&Transports::HandlePeerTestTimer, this, std::placeholders::_1)); + } + + void Transports::Stop () + { +- m_PeerCleanupTimer.cancel (); +- m_PeerTestTimer.cancel (); ++ if (m_PeerCleanupTimer) m_PeerCleanupTimer->cancel (); ++ if (m_PeerTestTimer) m_PeerTestTimer->cancel (); + m_Peers.clear (); + if (m_SSUServer) + { +@@ -193,7 +208,7 @@ namespace transport + + m_DHKeysPairSupplier.Stop (); + m_IsRunning = false; +- m_Service.stop (); ++ if (m_Service) m_Service->stop (); + if (m_Thread) + { + m_Thread->join (); +@@ -204,11 +219,11 @@ namespace transport + + void Transports::Run () + { +- while (m_IsRunning) ++ while (m_IsRunning && m_Service) + { + try + { +- m_Service.run (); ++ m_Service->run (); + } + catch (std::exception& ex) + { +@@ -251,7 +266,7 @@ namespace transport + #ifdef WITH_EVENTS + EmitEvent({{"type" , "transport.sendmsg"}, {"ident", ident.ToBase64()}, {"number", std::to_string(msgs.size())}}); + #endif +- m_Service.post (std::bind (&Transports::PostMessages, this, ident, msgs)); ++ m_Service->post (std::bind (&Transports::PostMessages, this, ident, msgs)); + } + + void Transports::PostMessages (i2p::data::IdentHash ident, std::vector > msgs) +@@ -386,7 +401,7 @@ namespace transport + + void Transports::RequestComplete (std::shared_ptr r, const i2p::data::IdentHash& ident) + { +- m_Service.post (std::bind (&Transports::HandleRequestComplete, this, r, ident)); ++ m_Service->post (std::bind (&Transports::HandleRequestComplete, this, r, ident)); + } + + void Transports::HandleRequestComplete (std::shared_ptr r, i2p::data::IdentHash ident) +@@ -411,7 +426,7 @@ namespace transport + + void Transports::NTCPResolve (const std::string& addr, const i2p::data::IdentHash& ident) + { +- auto resolver = std::make_shared(m_Service); ++ auto resolver = std::make_shared(*m_Service); + resolver->async_resolve (boost::asio::ip::tcp::resolver::query (addr, ""), + std::bind (&Transports::HandleNTCPResolve, this, + std::placeholders::_1, std::placeholders::_2, ident, resolver)); +@@ -454,7 +469,7 @@ namespace transport + + void Transports::SSUResolve (const std::string& addr, const i2p::data::IdentHash& ident) + { +- auto resolver = std::make_shared(m_Service); ++ auto resolver = std::make_shared(*m_Service); + resolver->async_resolve (boost::asio::ip::tcp::resolver::query (addr, ""), + std::bind (&Transports::HandleSSUResolve, this, + std::placeholders::_1, std::placeholders::_2, ident, resolver)); +@@ -497,7 +512,7 @@ namespace transport + void Transports::CloseSession (std::shared_ptr router) + { + if (!router) return; +- m_Service.post (std::bind (&Transports::PostCloseSession, this, router)); ++ m_Service->post (std::bind (&Transports::PostCloseSession, this, router)); + } + + void Transports::PostCloseSession (std::shared_ptr router) +@@ -584,7 +599,7 @@ namespace transport + + void Transports::PeerConnected (std::shared_ptr session) + { +- m_Service.post([session, this]() ++ m_Service->post([session, this]() + { + auto remoteIdentity = session->GetRemoteIdentity (); + if (!remoteIdentity) return; +@@ -632,7 +647,7 @@ namespace transport + + void Transports::PeerDisconnected (std::shared_ptr session) + { +- m_Service.post([session, this]() ++ m_Service->post([session, this]() + { + auto remoteIdentity = session->GetRemoteIdentity (); + if (!remoteIdentity) return; +@@ -690,8 +705,8 @@ namespace transport + UpdateBandwidth (); // TODO: use separate timer(s) for it + if (i2p::context.GetStatus () == eRouterStatusTesting) // if still testing, repeat peer test + DetectExternalIP (); +- m_PeerCleanupTimer.expires_from_now (boost::posix_time::seconds(5*SESSION_CREATION_TIMEOUT)); +- m_PeerCleanupTimer.async_wait (std::bind (&Transports::HandlePeerCleanupTimer, this, std::placeholders::_1)); ++ m_PeerCleanupTimer->expires_from_now (boost::posix_time::seconds(5*SESSION_CREATION_TIMEOUT)); ++ m_PeerCleanupTimer->async_wait (std::bind (&Transports::HandlePeerCleanupTimer, this, std::placeholders::_1)); + } + } + +@@ -700,8 +715,8 @@ namespace transport + if (ecode != boost::asio::error::operation_aborted) + { + PeerTest (); +- m_PeerTestTimer.expires_from_now (boost::posix_time::minutes(PEER_TEST_INTERVAL)); +- m_PeerTestTimer.async_wait (std::bind (&Transports::HandlePeerTestTimer, this, std::placeholders::_1)); ++ m_PeerTestTimer->expires_from_now (boost::posix_time::minutes(PEER_TEST_INTERVAL)); ++ m_PeerTestTimer->async_wait (std::bind (&Transports::HandlePeerTestTimer, this, std::placeholders::_1)); + } + } + +diff --git Transports.h Transports.h +index d83c0370..a68838e2 100644 +--- Transports.h ++++ Transports.h +@@ -84,7 +84,7 @@ namespace transport + bool IsOnline() const { return m_IsOnline; }; + void SetOnline (bool online) { m_IsOnline = online; }; + +- boost::asio::io_service& GetService () { return m_Service; }; ++ boost::asio::io_service& GetService () { return *m_Service; }; + std::shared_ptr GetNextDHKeysPair (); + void ReuseDHKeysPair (std::shared_ptr pair); + +@@ -144,9 +144,9 @@ namespace transport + + bool m_IsOnline, m_IsRunning; + std::thread * m_Thread; +- boost::asio::io_service m_Service; +- boost::asio::io_service::work m_Work; +- boost::asio::deadline_timer m_PeerCleanupTimer, m_PeerTestTimer; ++ boost::asio::io_service * m_Service; ++ boost::asio::io_service::work * m_Work; ++ boost::asio::deadline_timer * m_PeerCleanupTimer, * m_PeerTestTimer; + + NTCPServer * m_NTCPServer; + SSUServer * m_SSUServer; Property changes on: head/security/i2pd/files/patch-fix-daemon-option-eating-100-cpu ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property