aboutsummaryrefslogtreecommitdiff
path: root/src/cryptonote_basic/miner.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/cryptonote_basic/miner.cpp')
-rw-r--r--src/cryptonote_basic/miner.cpp34
1 files changed, 22 insertions, 12 deletions
diff --git a/src/cryptonote_basic/miner.cpp b/src/cryptonote_basic/miner.cpp
index 4e2edc20f..e6c6bddb6 100644
--- a/src/cryptonote_basic/miner.cpp
+++ b/src/cryptonote_basic/miner.cpp
@@ -106,6 +106,7 @@ namespace cryptonote
m_thread_index(0),
m_phandler(phandler),
m_height(0),
+ m_threads_active(0),
m_pausers_count(0),
m_threads_total(0),
m_starter_nonce(0),
@@ -264,8 +265,8 @@ namespace cryptonote
{
CRITICAL_REGION_LOCAL(m_threads_lock);
boost::interprocess::ipcdetail::atomic_write32(&m_stop, 1);
- for(boost::thread& th: m_threads)
- th.join();
+ while (m_threads_active > 0)
+ misc_utils::sleep_no_w(100);
m_threads.clear();
}
boost::interprocess::ipcdetail::atomic_write32(&m_stop, 0);
@@ -447,15 +448,17 @@ namespace cryptonote
// In case background mining was active and the miner threads are waiting
// on the background miner to signal start.
- m_is_background_mining_started_cond.notify_all();
-
- for(boost::thread& th: m_threads)
- th.join();
+ while (m_threads_active > 0)
+ {
+ m_is_background_mining_started_cond.notify_all();
+ misc_utils::sleep_no_w(100);
+ }
// The background mining thread could be sleeping for a long time, so we
// interrupt it just in case
m_background_mining_thread.interrupt();
m_background_mining_thread.join();
+ m_is_background_mining_enabled = false;
MINFO("Mining has been stopped, " << m_threads.size() << " finished" );
m_threads.clear();
@@ -573,7 +576,8 @@ namespace cryptonote
//we lucky!
++m_config.current_extra_message_index;
MGINFO_GREEN("Found block " << get_block_hash(b) << " at height " << height << " for difficulty: " << local_diff);
- if(!m_phandler->handle_block_found(b))
+ cryptonote::block_verification_context bvc;
+ if(!m_phandler->handle_block_found(b, bvc) || !bvc.m_added_to_main_chain)
{
--m_config.current_extra_message_index;
}else
@@ -589,6 +593,7 @@ namespace cryptonote
}
slow_hash_free_state();
MGINFO("Miner thread stopped ["<< th_local_index << "]");
+ --m_threads_active;
return true;
}
//-----------------------------------------------------------------------------------------------------
@@ -747,10 +752,10 @@ namespace cryptonote
uint8_t idle_percentage = get_percent_of_total(idle_diff, total_diff);
uint8_t process_percentage = get_percent_of_total(process_diff, total_diff);
- MGINFO("idle percentage is " << unsigned(idle_percentage) << "\%, miner percentage is " << unsigned(process_percentage) << "\%, ac power : " << on_ac_power);
+ MDEBUG("idle percentage is " << unsigned(idle_percentage) << "\%, miner percentage is " << unsigned(process_percentage) << "\%, ac power : " << on_ac_power);
if( idle_percentage + process_percentage < get_idle_threshold() || !on_ac_power )
{
- MGINFO("cpu is " << unsigned(idle_percentage) << "% idle, idle threshold is " << unsigned(get_idle_threshold()) << "\%, ac power : " << on_ac_power << ", background mining stopping, thanks for your contribution!");
+ MINFO("cpu is " << unsigned(idle_percentage) << "% idle, idle threshold is " << unsigned(get_idle_threshold()) << "\%, ac power : " << on_ac_power << ", background mining stopping, thanks for your contribution!");
m_is_background_mining_started = false;
// reset process times
@@ -788,10 +793,10 @@ namespace cryptonote
uint64_t idle_diff = (current_idle_time - prev_idle_time);
uint8_t idle_percentage = get_percent_of_total(idle_diff, total_diff);
- MGINFO("idle percentage is " << unsigned(idle_percentage));
+ MDEBUG("idle percentage is " << unsigned(idle_percentage));
if( idle_percentage >= get_idle_threshold() && on_ac_power )
{
- MGINFO("cpu is " << unsigned(idle_percentage) << "% idle, idle threshold is " << unsigned(get_idle_threshold()) << "\%, ac power : " << on_ac_power << ", background mining started, good luck!");
+ MINFO("cpu is " << unsigned(idle_percentage) << "% idle, idle threshold is " << unsigned(get_idle_threshold()) << "\%, ac power : " << on_ac_power << ", background mining started, good luck!");
m_is_background_mining_started = true;
m_is_background_mining_started_cond.notify_all();
@@ -1049,7 +1054,12 @@ namespace cryptonote
if (boost::logic::indeterminate(on_battery))
{
- LOG_ERROR("couldn't query power status from " << power_supply_class_path);
+ static bool error_shown = false;
+ if (!error_shown)
+ {
+ LOG_ERROR("couldn't query power status from " << power_supply_class_path);
+ error_shown = true;
+ }
}
return on_battery;