Merge PR #2107: Fix iterator leak
This commit is contained in:
commit
0728bd995f
|
@ -71,5 +71,6 @@ BUG FIXES
|
|||
|
||||
* SDK
|
||||
* \#1988 Make us compile on OpenBSD (disable ledger) [#1988] (https://github.com/cosmos/cosmos-sdk/issues/1988)
|
||||
* \#2105 Fix DB Iterator leak, which may leak a go routine.
|
||||
|
||||
* Tendermint
|
||||
|
|
|
@ -93,6 +93,7 @@ func (valset ValidatorSet) Dissociate(ctx sdk.Context, base sdk.AccAddress, asso
|
|||
func (valset ValidatorSet) Associations(ctx sdk.Context, base sdk.AccAddress) (res []sdk.AccAddress) {
|
||||
res = make([]sdk.AccAddress, valset.maxAssoc)
|
||||
iter := sdk.KVStorePrefixIterator(valset.store, GetAssocPrefix(base))
|
||||
defer iter.Close()
|
||||
i := 0
|
||||
for ; iter.Valid(); iter.Next() {
|
||||
key := iter.Key()
|
||||
|
|
|
@ -28,6 +28,7 @@ func (keeper Keeper) update(ctx sdk.Context, val sdk.Validator, valset sdk.Valid
|
|||
prefix := GetSignPrefix(p, keeper.cdc)
|
||||
store := ctx.KVStore(keeper.key)
|
||||
iter := sdk.KVStorePrefixIterator(store, prefix)
|
||||
defer iter.Close()
|
||||
for ; iter.Valid(); iter.Next() {
|
||||
if valset.Validator(ctx, iter.Value()) != nil {
|
||||
store.Delete(iter.Key())
|
||||
|
|
|
@ -168,6 +168,7 @@ func TestIAVLSubspaceIterator(t *testing.T) {
|
|||
require.EqualValues(t, value, expectedKey)
|
||||
i++
|
||||
}
|
||||
iter.Close()
|
||||
require.Equal(t, len(expected), i)
|
||||
|
||||
iter = sdk.KVStorePrefixIterator(iavlStore, []byte{byte(55), byte(255), byte(255)})
|
||||
|
@ -183,6 +184,7 @@ func TestIAVLSubspaceIterator(t *testing.T) {
|
|||
require.EqualValues(t, value, []byte("test4"))
|
||||
i++
|
||||
}
|
||||
iter.Close()
|
||||
require.Equal(t, len(expected), i)
|
||||
|
||||
iter = sdk.KVStorePrefixIterator(iavlStore, []byte{byte(255), byte(255)})
|
||||
|
@ -198,6 +200,7 @@ func TestIAVLSubspaceIterator(t *testing.T) {
|
|||
require.EqualValues(t, value, []byte("test4"))
|
||||
i++
|
||||
}
|
||||
iter.Close()
|
||||
require.Equal(t, len(expected), i)
|
||||
}
|
||||
|
||||
|
|
|
@ -87,6 +87,7 @@ func (am AccountMapper) SetAccount(ctx sdk.Context, acc Account) {
|
|||
func (am AccountMapper) IterateAccounts(ctx sdk.Context, process func(Account) (stop bool)) {
|
||||
store := ctx.KVStore(am.key)
|
||||
iter := sdk.KVStorePrefixIterator(store, []byte("account:"))
|
||||
defer iter.Close()
|
||||
for {
|
||||
if !iter.Valid() {
|
||||
return
|
||||
|
|
|
@ -130,6 +130,7 @@ func TestDeposits(t *testing.T) {
|
|||
require.Equal(t, fourSteak, deposit.Amount)
|
||||
depositsIterator.Next()
|
||||
require.False(t, depositsIterator.Valid())
|
||||
depositsIterator.Close()
|
||||
|
||||
// Test Refund Deposits
|
||||
deposit, found = keeper.GetDeposit(ctx, proposalID, addrs[1])
|
||||
|
@ -196,6 +197,7 @@ func TestVotes(t *testing.T) {
|
|||
require.Equal(t, OptionNoWithVeto, vote.Option)
|
||||
votesIterator.Next()
|
||||
require.False(t, votesIterator.Valid())
|
||||
votesIterator.Close()
|
||||
}
|
||||
|
||||
func TestProposalQueues(t *testing.T) {
|
||||
|
|
|
@ -36,6 +36,7 @@ func tally(ctx sdk.Context, keeper Keeper, proposal Proposal) (passes bool, tall
|
|||
|
||||
// iterate over all the votes
|
||||
votesIterator := keeper.GetVotes(ctx, proposal.GetProposalID())
|
||||
defer votesIterator.Close()
|
||||
for ; votesIterator.Valid(); votesIterator.Next() {
|
||||
vote := &Vote{}
|
||||
keeper.cdc.MustUnmarshalBinary(votesIterator.Value(), vote)
|
||||
|
@ -64,7 +65,6 @@ func tally(ctx sdk.Context, keeper Keeper, proposal Proposal) (passes bool, tall
|
|||
|
||||
keeper.deleteVote(ctx, vote.ProposalID, vote.Voter)
|
||||
}
|
||||
votesIterator.Close()
|
||||
|
||||
// Iterate over the validators again to tally their voting power and see who didn't vote
|
||||
nonVoting = []sdk.AccAddress{}
|
||||
|
|
Loading…
Reference in New Issue