diff --git a/chain/messagepool/messagepool.go b/chain/messagepool/messagepool.go index 38456a143..369be86f6 100644 --- a/chain/messagepool/messagepool.go +++ b/chain/messagepool/messagepool.go @@ -341,7 +341,7 @@ func (mp *MessagePool) addLocked(m *types.SignedMessage) error { func (mp *MessagePool) GetNonce(addr address.Address) (uint64, error) { mp.curTsLk.Lock() - defer mp.curTsLk.Lock() + defer mp.curTsLk.Unlock() mp.lk.Lock() defer mp.lk.Unlock() @@ -415,7 +415,7 @@ func (mp *MessagePool) getStateBalance(addr address.Address) (types.BigInt, erro func (mp *MessagePool) PushWithNonce(addr address.Address, cb func(uint64) (*types.SignedMessage, error)) (*types.SignedMessage, error) { mp.curTsLk.Lock() - defer mp.curTsLk.Lock() + defer mp.curTsLk.Unlock() mp.lk.Lock() defer mp.lk.Unlock() @@ -534,6 +534,8 @@ func (mp *MessagePool) HeadChange(revert []*types.TipSet, apply []*types.TipSet) return err } + mp.curTs = pts + for _, msg := range msgs { if err := mp.addTs(msg, pts); err != nil { log.Error(err) // TODO: probably lots of spam in multi-block tsets diff --git a/chain/messagepool/messagepool_test.go b/chain/messagepool/messagepool_test.go index 1cd8f8a75..8b18465b9 100644 --- a/chain/messagepool/messagepool_test.go +++ b/chain/messagepool/messagepool_test.go @@ -52,8 +52,9 @@ func (tma *testMpoolApi) setBlockMessages(h *types.BlockHeader, msgs ...*types.S tma.tipsets = append(tma.tipsets, mock.TipSet(h)) } -func (tma *testMpoolApi) SubscribeHeadChanges(cb func(rev, app []*types.TipSet) error) { +func (tma *testMpoolApi) SubscribeHeadChanges(cb func(rev, app []*types.TipSet) error) *types.TipSet { tma.cb = cb + return nil } func (tma *testMpoolApi) PutMessage(m store.ChainMsg) (cid.Cid, error) { @@ -216,7 +217,8 @@ func TestRevertMessages(t *testing.T) { assertNonce(t, mp, sender, 4) - if len(mp.Pending()) != 3 { + p, _ := mp.Pending() + if len(p) != 3 { t.Fatal("expected three messages in mempool") }