diff --git a/libraries/chain/db_maint.cpp b/libraries/chain/db_maint.cpp index 31813724..71eac345 100644 --- a/libraries/chain/db_maint.cpp +++ b/libraries/chain/db_maint.cpp @@ -400,10 +400,13 @@ void database::update_active_sons() const auto& all_sons = get_index_type().indices(); + auto& local_vote_buffer_ref = _vote_tally_buffer; for( const son_object& son : all_sons ) { - modify( son, [&]( son_object& obj ){ - obj.total_votes = _vote_tally_buffer[son.vote_id]; + modify( son, [local_vote_buffer_ref]( son_object& obj ){ + obj.total_votes = local_vote_buffer_ref[obj.vote_id]; + if(obj.status == son_status::request_maintenance) + obj.status = son_status::in_maintenance; }); } diff --git a/tests/cli/son.cpp b/tests/cli/son.cpp index 5f8ad78a..9ce65cfc 100644 --- a/tests/cli/son.cpp +++ b/tests/cli/son.cpp @@ -699,6 +699,13 @@ BOOST_AUTO_TEST_CASE( maintenance_test ) con.wallet_api_ptr->start_son_maintenance(name, true); BOOST_CHECK(generate_block()); + // check SON is in maintenance + son_obj = con.wallet_api_ptr->get_son(name); + BOOST_CHECK(son_obj.status == son_status::request_maintenance); + + // process maintenance + BOOST_CHECK(generate_maintenance_block()); + // check SON is in maintenance son_obj = con.wallet_api_ptr->get_son(name); BOOST_CHECK(son_obj.status == son_status::in_maintenance); diff --git a/tests/tests/son_operations_tests.cpp b/tests/tests/son_operations_tests.cpp index e0e56e19..b04dd67e 100644 --- a/tests/tests/son_operations_tests.cpp +++ b/tests/tests/son_operations_tests.cpp @@ -732,7 +732,7 @@ BOOST_AUTO_TEST_CASE( son_heartbeat_test ) { PUSH_TX( db, trx, ~0); generate_block(); trx.clear(); - BOOST_CHECK( obj->status == son_status::in_maintenance); + BOOST_CHECK( obj->status == son_status::request_maintenance); } uint64_t downtime = 0;