From c9be94260335d62a36359daea743ccb5ee81de5f Mon Sep 17 00:00:00 2001 From: Otto Fourschaft Date: Wed, 30 Apr 2014 20:21:49 +0400 Subject: [PATCH] Increased thread stack size on OSX --- contrib/epee/include/net/abstract_tcp_server2.h | 4 ++-- contrib/epee/include/net/abstract_tcp_server2.inl | 4 ++-- src/cryptonote_config.h | 2 +- src/cryptonote_core/miner.cpp | 11 ++++++++--- src/cryptonote_core/miner.h | 2 +- src/daemon/daemon_commands_handler.h | 5 ++++- src/p2p/net_node.inl | 5 ++++- src/rpc/core_rpc_server.cpp | 5 ++++- 8 files changed, 26 insertions(+), 12 deletions(-) diff --git a/contrib/epee/include/net/abstract_tcp_server2.h b/contrib/epee/include/net/abstract_tcp_server2.h index 29bf59a5..b8e291c3 100644 --- a/contrib/epee/include/net/abstract_tcp_server2.h +++ b/contrib/epee/include/net/abstract_tcp_server2.h @@ -153,7 +153,7 @@ namespace net_utils bool init_server(const std::string port, const std::string& address = "0.0.0.0"); /// Run the server's io_service loop. - bool run_server(size_t threads_count, bool wait = true); + bool run_server(size_t threads_count, bool wait = true, const boost::thread::attributes& attrs = boost::thread::attributes()); /// wait for service workers stop bool timed_wait_server_stop(uint64_t wait_mseconds); @@ -273,4 +273,4 @@ namespace net_utils #include "abstract_tcp_server2.inl" -#endif \ No newline at end of file +#endif diff --git a/contrib/epee/include/net/abstract_tcp_server2.inl b/contrib/epee/include/net/abstract_tcp_server2.inl index 236bc159..2a4b10e4 100644 --- a/contrib/epee/include/net/abstract_tcp_server2.inl +++ b/contrib/epee/include/net/abstract_tcp_server2.inl @@ -524,7 +524,7 @@ POP_WARNINGS } //--------------------------------------------------------------------------------- template - bool boosted_tcp_server::run_server(size_t threads_count, bool wait) + bool boosted_tcp_server::run_server(size_t threads_count, bool wait, const boost::thread::attributes& attrs) { TRY_ENTRY(); m_threads_count = threads_count; @@ -538,7 +538,7 @@ POP_WARNINGS for (std::size_t i = 0; i < threads_count; ++i) { boost::shared_ptr thread(new boost::thread( - boost::bind(&boosted_tcp_server::worker_thread, this))); + attrs, boost::bind(&boosted_tcp_server::worker_thread, this))); m_threads.push_back(thread); } CRITICAL_REGION_END(); diff --git a/src/cryptonote_config.h b/src/cryptonote_config.h index 9f0b5bd9..6b3db89a 100644 --- a/src/cryptonote_config.h +++ b/src/cryptonote_config.h @@ -78,5 +78,5 @@ #define P2P_NET_DATA_FILENAME "p2pstate.bin" #define MINER_CONFIG_FILE_NAME "miner_conf.json" - +#define THREAD_STACK_SIZE 5 * 1024 * 1024 diff --git a/src/cryptonote_core/miner.cpp b/src/cryptonote_core/miner.cpp index 142c81f6..56b459d6 100644 --- a/src/cryptonote_core/miner.cpp +++ b/src/cryptonote_core/miner.cpp @@ -193,7 +193,7 @@ namespace cryptonote return !m_stop; } //----------------------------------------------------------------------------------------------------- - bool miner::start(const account_public_address& adr, size_t threads_count) + bool miner::start(const account_public_address& adr, size_t threads_count, const boost::thread::attributes& attrs) { m_mine_address = adr; m_threads_total = static_cast(threads_count); @@ -218,7 +218,9 @@ namespace cryptonote boost::interprocess::ipcdetail::atomic_write32(&m_thread_index, 0); for(size_t i = 0; i != threads_count; i++) - m_threads.push_back(boost::thread(boost::bind(&miner::worker_thread, this))); + { + m_threads.push_back(boost::thread(attrs, boost::bind(&miner::worker_thread, this))); + } LOG_PRINT_L0("Mining has started with " << threads_count << " threads, good luck!" ) return true; @@ -269,7 +271,10 @@ namespace cryptonote { if(m_do_mining) { - start(m_mine_address, m_threads_total); + boost::thread::attributes attrs; + attrs.set_stack_size(THREAD_STACK_SIZE); + + start(m_mine_address, m_threads_total, attrs); } } //----------------------------------------------------------------------------------------------------- diff --git a/src/cryptonote_core/miner.h b/src/cryptonote_core/miner.h index 03f09509..da4578b0 100644 --- a/src/cryptonote_core/miner.h +++ b/src/cryptonote_core/miner.h @@ -35,7 +35,7 @@ namespace cryptonote static void init_options(boost::program_options::options_description& desc); bool set_block_template(const block& bl, const difficulty_type& diffic, uint64_t height); bool on_block_chain_update(); - bool start(const account_public_address& adr, size_t threads_count); + bool start(const account_public_address& adr, size_t threads_count, const boost::thread::attributes& attrs); uint64_t get_speed(); void send_stop_signal(); bool stop(); diff --git a/src/daemon/daemon_commands_handler.h b/src/daemon/daemon_commands_handler.h index 7695508c..dca524f7 100644 --- a/src/daemon/daemon_commands_handler.h +++ b/src/daemon/daemon_commands_handler.h @@ -291,7 +291,10 @@ private: threads_count = (ok && 0 < threads_count) ? threads_count : 1; } - m_srv.get_payload_object().get_core().get_miner().start(adr, threads_count); + boost::thread::attributes attrs; + attrs.set_stack_size(THREAD_STACK_SIZE); + + m_srv.get_payload_object().get_core().get_miner().start(adr, threads_count, attrs); return true; } //-------------------------------------------------------------------------------- diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl index e7b1afe6..399f4ae1 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -286,9 +286,12 @@ namespace nodetool m_net_server.add_idle_handler(boost::bind(&node_server::idle_worker, this), 1000); m_net_server.add_idle_handler(boost::bind(&t_payload_net_handler::on_idle, &m_payload_handler), 1000); + boost::thread::attributes attrs; + attrs.set_stack_size(THREAD_STACK_SIZE); + //go to loop LOG_PRINT("Run net_service loop( " << thrds_count << " threads)...", LOG_LEVEL_0); - if(!m_net_server.run_server(thrds_count)) + if(!m_net_server.run_server(thrds_count, true, attrs)) { LOG_ERROR("Failed to run net tcp server!"); } diff --git a/src/rpc/core_rpc_server.cpp b/src/rpc/core_rpc_server.cpp index a2ea1d91..2be9bdd4 100644 --- a/src/rpc/core_rpc_server.cpp +++ b/src/rpc/core_rpc_server.cpp @@ -251,7 +251,10 @@ namespace cryptonote return true; } - if(!m_core.get_miner().start(adr, static_cast(req.threads_count))) + boost::thread::attributes attrs; + attrs.set_stack_size(THREAD_STACK_SIZE); + + if(!m_core.get_miner().start(adr, static_cast(req.threads_count), attrs)) { res.status = "Failed, mining not started"; return true;