diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2017-05-02 16:58:51 -0700 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2017-05-02 16:58:51 -0700 |
commit | 8e19188f49fe33679ebc565cd5f6d184e7b87842 (patch) | |
tree | c2187ea9f0970cceaeef940c34e2bbb66a5c9dac /controller/EmbeddedNetworkController.hpp | |
parent | 625e3e8e259637ecf45b2f7738b18c9d33975852 (diff) | |
download | infinitytier-8e19188f49fe33679ebc565cd5f6d184e7b87842.tar.gz infinitytier-8e19188f49fe33679ebc565cd5f6d184e7b87842.zip |
Do the sometimes rather big "pong" in a background worker thread.
Diffstat (limited to 'controller/EmbeddedNetworkController.hpp')
-rw-r--r-- | controller/EmbeddedNetworkController.hpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/controller/EmbeddedNetworkController.hpp b/controller/EmbeddedNetworkController.hpp index 0a6b8176..ade7eb20 100644 --- a/controller/EmbeddedNetworkController.hpp +++ b/controller/EmbeddedNetworkController.hpp @@ -26,6 +26,7 @@ #include <vector> #include <set> #include <list> +#include <thread> #include "../node/Constants.hpp" @@ -103,11 +104,29 @@ private: InetAddress fromAddr; Identity identity; Dictionary<ZT_NETWORKCONFIG_METADATA_DICT_CAPACITY> metaData; + enum { + RQENTRY_TYPE_REQUEST = 0, + RQENTRY_TYPE_PING = 1 + } type; }; static void _circuitTestCallback(ZT_Node *node,ZT_CircuitTest *test,const ZT_CircuitTestReport *report); void _request(uint64_t nwid,const InetAddress &fromAddr,uint64_t requestPacketId,const Identity &identity,const Dictionary<ZT_NETWORKCONFIG_METADATA_DICT_CAPACITY> &metaData); + inline void _startThreads() + { + Mutex::Lock _l(_threads_m); + if (_threads.size() == 0) { + long hwc = (long)std::thread::hardware_concurrency(); + if (hwc < 1) + hwc = 1; + else if (hwc > 16) + hwc = 16; + for(long i=0;i<hwc;++i) + _threads.push_back(Thread::start(this)); + } + } + // These init objects with default and static/informational fields inline void _initMember(nlohmann::json &member) { |