Fix two places where objects were being used after they were deleted

This commit is contained in:
Eric Frias 2015-10-09 11:42:56 -04:00
parent 2a07fba3c2
commit 7fe0e64a5e
2 changed files with 6 additions and 3 deletions

View file

@ -458,6 +458,7 @@ void database::apply_block( const signed_block& next_block, uint32_t skip )
void database::_apply_block( const signed_block& next_block ) void database::_apply_block( const signed_block& next_block )
{ try { { try {
uint32_t next_block_num = next_block.block_num();
uint32_t skip = get_node_properties().skip_flags; uint32_t skip = get_node_properties().skip_flags;
_applied_ops.clear(); _applied_ops.clear();
@ -468,7 +469,7 @@ void database::_apply_block( const signed_block& next_block )
const auto& dynamic_global_props = get<dynamic_global_property_object>(dynamic_global_property_id_type()); const auto& dynamic_global_props = get<dynamic_global_property_object>(dynamic_global_property_id_type());
bool maint_needed = (dynamic_global_props.next_maintenance_time <= next_block.timestamp); bool maint_needed = (dynamic_global_props.next_maintenance_time <= next_block.timestamp);
_current_block_num = next_block.block_num(); _current_block_num = next_block_num;
_current_trx_in_block = 0; _current_trx_in_block = 0;
for( const auto& trx : next_block.transactions ) for( const auto& trx : next_block.transactions )

View file

@ -89,7 +89,6 @@ void database::globally_settle_asset( const asset_object& mia, const price& sett
void database::cancel_order(const force_settlement_object& order, bool create_virtual_op) void database::cancel_order(const force_settlement_object& order, bool create_virtual_op)
{ {
adjust_balance(order.owner, order.balance); adjust_balance(order.owner, order.balance);
remove(order);
if( create_virtual_op ) if( create_virtual_op )
{ {
@ -99,6 +98,7 @@ void database::cancel_order(const force_settlement_object& order, bool create_vi
vop.amount = order.balance; vop.amount = order.balance;
push_applied_operation( vop ); push_applied_operation( vop );
} }
remove(order);
} }
void database::cancel_order( const limit_order_object& order, bool create_virtual_op ) void database::cancel_order( const limit_order_object& order, bool create_virtual_op )
@ -361,7 +361,6 @@ bool database::fill_order(const force_settlement_object& settle, const asset& pa
}); });
filled = false; filled = false;
} else { } else {
remove(settle);
filled = true; filled = true;
} }
adjust_balance(settle.owner, receives - issuer_fees); adjust_balance(settle.owner, receives - issuer_fees);
@ -369,6 +368,9 @@ bool database::fill_order(const force_settlement_object& settle, const asset& pa
assert( pays.asset_id != receives.asset_id ); assert( pays.asset_id != receives.asset_id );
push_applied_operation( fill_order_operation{ settle.id, settle.owner, pays, receives, issuer_fees } ); push_applied_operation( fill_order_operation{ settle.id, settle.owner, pays, receives, issuer_fees } );
if (filled)
remove(settle);
return filled; return filled;
} FC_CAPTURE_AND_RETHROW( (settle)(pays)(receives) ) } } FC_CAPTURE_AND_RETHROW( (settle)(pays)(receives) ) }