From d7f7d6435219f8d51cd15858bfcc4f1459e430f4 Mon Sep 17 00:00:00 2001 From: Daniel Larimer Date: Mon, 22 Jun 2015 18:11:54 -0400 Subject: [PATCH] notify observes of changed objects after every pushed transaction --- libraries/chain/db_block.cpp | 13 +++++++++---- libraries/chain/include/graphene/chain/database.hpp | 3 ++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/libraries/chain/db_block.cpp b/libraries/chain/db_block.cpp index f1a483ba..51086361 100644 --- a/libraries/chain/db_block.cpp +++ b/libraries/chain/db_block.cpp @@ -202,6 +202,7 @@ processed_transaction database::_push_transaction( const signed_transaction& trx FC_ASSERT( (skip & skip_block_size_check) || fc::raw::pack_size(_pending_block) <= get_global_properties().parameters.maximum_block_size ); + notify_changed_objects(); // The transaction applied successfully. Merge its changes into the pending block session. session.merge(); return processed_trx; @@ -397,14 +398,18 @@ void database::_apply_block( const signed_block& next_block ) applied_block( next_block ); //emit _applied_ops.clear(); + notify_changed_objects(); + + update_pending_block(next_block, current_block_interval); +} FC_CAPTURE_AND_RETHROW( (next_block.block_num()) ) } + +void database::notify_changed_objects() +{ const auto& head_undo = _undo_db.head(); vector changed_ids; changed_ids.reserve(head_undo.old_values.size()); for( const auto& item : head_undo.old_values ) changed_ids.push_back(item.first); changed_objects(changed_ids); - - - update_pending_block(next_block, current_block_interval); -} FC_CAPTURE_AND_RETHROW( (next_block.block_num()) ) } +} processed_transaction database::apply_transaction( const signed_transaction& trx, uint32_t skip ) { diff --git a/libraries/chain/include/graphene/chain/database.hpp b/libraries/chain/include/graphene/chain/database.hpp index c26b44a6..41c4b3a6 100644 --- a/libraries/chain/include/graphene/chain/database.hpp +++ b/libraries/chain/include/graphene/chain/database.hpp @@ -200,7 +200,7 @@ namespace graphene { namespace chain { fc::signal applied_block; /** - * After a block has been applied and committed. The callback + * Emitted After a block has been applied and committed. The callback * should not yield and should execute quickly. */ fc::signal&)> changed_objects; @@ -394,6 +394,7 @@ namespace graphene { namespace chain { protected: //Mark pop_undo() as protected -- we do not want outside calling pop_undo(); it should call pop_block() instead void pop_undo() { object_database::pop_undo(); } + void notify_changed_objects(); private: optional _pending_block_session;