Merge PR #3387: Add missing iterator close

This commit is contained in:
HaoyangLiu 2019-01-25 19:13:17 +08:00 committed by Christopher Goes
parent 6b02e08160
commit afb04b117e
7 changed files with 13 additions and 11 deletions

View File

@ -84,6 +84,7 @@ func (m List) Push(value interface{}) {
// CONTRACT: No writes may happen within a domain while iterating over it.
func (m List) Iterate(ptr interface{}, fn func(uint64) bool) {
iter := sdk.KVStorePrefixIterator(m.store, []byte{0x01})
defer iter.Close()
for ; iter.Valid(); iter.Next() {
v := iter.Value()
m.cdc.MustUnmarshalBinaryLengthPrefixed(v, ptr)
@ -100,8 +101,6 @@ func (m List) Iterate(ptr interface{}, fn func(uint64) bool) {
break
}
}
iter.Close()
}
func subspace(prefix []byte) (start, end []byte) {

View File

@ -184,12 +184,14 @@ func ExportGenesis(ctx sdk.Context, k Keeper) GenesisState {
for _, proposal := range proposals {
proposalID := proposal.GetProposalID()
depositsIterator := k.GetDeposits(ctx, proposalID)
defer depositsIterator.Close()
for ; depositsIterator.Valid(); depositsIterator.Next() {
var deposit Deposit
k.cdc.MustUnmarshalBinaryLengthPrefixed(depositsIterator.Value(), &deposit)
deposits = append(deposits, DepositWithMetadata{proposalID, deposit})
}
votesIterator := k.GetVotes(ctx, proposalID)
defer votesIterator.Close()
for ; votesIterator.Valid(); votesIterator.Next() {
var vote Vote
k.cdc.MustUnmarshalBinaryLengthPrefixed(votesIterator.Value(), &vote)

View File

@ -422,7 +422,7 @@ func (keeper Keeper) GetDeposits(ctx sdk.Context, proposalID uint64) sdk.Iterato
func (keeper Keeper) RefundDeposits(ctx sdk.Context, proposalID uint64) {
store := ctx.KVStore(keeper.storeKey)
depositsIterator := keeper.GetDeposits(ctx, proposalID)
defer depositsIterator.Close()
for ; depositsIterator.Valid(); depositsIterator.Next() {
deposit := &Deposit{}
keeper.cdc.MustUnmarshalBinaryLengthPrefixed(depositsIterator.Value(), deposit)
@ -434,15 +434,13 @@ func (keeper Keeper) RefundDeposits(ctx sdk.Context, proposalID uint64) {
store.Delete(depositsIterator.Key())
}
depositsIterator.Close()
}
// Deletes all the deposits on a specific proposal without refunding them
func (keeper Keeper) DeleteDeposits(ctx sdk.Context, proposalID uint64) {
store := ctx.KVStore(keeper.storeKey)
depositsIterator := keeper.GetDeposits(ctx, proposalID)
defer depositsIterator.Close()
for ; depositsIterator.Valid(); depositsIterator.Next() {
deposit := &Deposit{}
keeper.cdc.MustUnmarshalBinaryLengthPrefixed(depositsIterator.Value(), deposit)
@ -454,8 +452,6 @@ func (keeper Keeper) DeleteDeposits(ctx sdk.Context, proposalID uint64) {
store.Delete(depositsIterator.Key())
}
depositsIterator.Close()
}
// =====================================================

View File

@ -181,6 +181,7 @@ func queryDeposits(ctx sdk.Context, path []string, req abci.RequestQuery, keeper
var deposits []Deposit
depositsIterator := keeper.GetDeposits(ctx, params.ProposalID)
defer depositsIterator.Close()
for ; depositsIterator.Valid(); depositsIterator.Next() {
deposit := Deposit{}
keeper.cdc.MustUnmarshalBinaryLengthPrefixed(depositsIterator.Value(), &deposit)
@ -238,6 +239,7 @@ func queryVotes(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Ke
var votes []Vote
votesIterator := keeper.GetVotes(ctx, params.ProposalID)
defer votesIterator.Close()
for ; votesIterator.Valid(); votesIterator.Next() {
vote := Vote{}
keeper.cdc.MustUnmarshalBinaryLengthPrefixed(votesIterator.Value(), &vote)

View File

@ -14,6 +14,7 @@ var _ sdk.ValidatorSet = Keeper{}
func (k Keeper) IterateValidators(ctx sdk.Context, fn func(index int64, validator sdk.Validator) (stop bool)) {
store := ctx.KVStore(k.storeKey)
iterator := sdk.KVStorePrefixIterator(store, ValidatorsKey)
defer iterator.Close()
i := int64(0)
for ; iterator.Valid(); iterator.Next() {
validator := types.MustUnmarshalValidator(k.cdc, iterator.Value())
@ -23,7 +24,6 @@ func (k Keeper) IterateValidators(ctx sdk.Context, fn func(index int64, validato
}
i++
}
iterator.Close()
}
// iterate through the bonded validator set and perform the provided function
@ -52,6 +52,7 @@ func (k Keeper) IterateBondedValidatorsByPower(ctx sdk.Context, fn func(index in
// iterate through the active validator set and perform the provided function
func (k Keeper) IterateLastValidators(ctx sdk.Context, fn func(index int64, validator sdk.Validator) (stop bool)) {
iterator := k.LastValidatorsIterator(ctx)
defer iterator.Close()
i := int64(0)
for ; iterator.Valid(); iterator.Next() {
address := AddressFromLastValidatorPowerKey(iterator.Key())
@ -66,7 +67,6 @@ func (k Keeper) IterateLastValidators(ctx sdk.Context, fn func(index int64, vali
}
i++
}
iterator.Close()
}
// get the sdk.validator for a particular address
@ -134,6 +134,7 @@ func (k Keeper) IterateDelegations(ctx sdk.Context, delAddr sdk.AccAddress,
store := ctx.KVStore(k.storeKey)
delegatorPrefixKey := GetDelegationsKey(delAddr)
iterator := sdk.KVStorePrefixIterator(store, delegatorPrefixKey) //smallest to largest
defer iterator.Close()
for i := int64(0); iterator.Valid(); iterator.Next() {
del := types.MustUnmarshalDelegation(k.cdc, iterator.Value())
stop := fn(i, del)
@ -142,5 +143,4 @@ func (k Keeper) IterateDelegations(ctx sdk.Context, delAddr sdk.AccAddress,
}
i++
}
iterator.Close()
}

View File

@ -215,6 +215,7 @@ func TestingUpdateValidator(keeper Keeper, ctx sdk.Context, validator types.Vali
{ // Remove any existing power key for validator.
store := ctx.KVStore(keeper.storeKey)
iterator := sdk.KVStorePrefixIterator(store, ValidatorsByPowerIndexKey)
defer iterator.Close()
deleted := false
for ; iterator.Valid(); iterator.Next() {
valAddr := parseValidatorPowerRankKey(iterator.Key())

View File

@ -36,6 +36,7 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx sdk.Context) (updates []ab
// Iterate over validators, highest power to lowest.
iterator := sdk.KVStoreReversePrefixIterator(store, ValidatorsByPowerIndexKey)
defer iterator.Close()
count := 0
for ; iterator.Valid() && count < int(maxValidators); iterator.Next() {
@ -254,6 +255,7 @@ func (k Keeper) getLastValidatorsByAddr(ctx sdk.Context) validatorsByAddr {
last := make(validatorsByAddr)
store := ctx.KVStore(k.storeKey)
iterator := sdk.KVStorePrefixIterator(store, LastValidatorPowerKey)
defer iterator.Close()
for ; iterator.Valid(); iterator.Next() {
var valAddr [sdk.AddrLen]byte
copy(valAddr[:], iterator.Key()[1:])