From f0fec60841c26938e8d04e06a751c939dea972c8 Mon Sep 17 00:00:00 2001 From: shannonwells Date: Wed, 22 Apr 2020 13:58:26 -0700 Subject: [PATCH] ensure unlock on error --- paychmgr/simple.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/paychmgr/simple.go b/paychmgr/simple.go index 56144466a..d1ac611f2 100644 --- a/paychmgr/simple.go +++ b/paychmgr/simple.go @@ -116,7 +116,7 @@ func (pm *Manager) waitForAddFundsMsg(ctx context.Context, mcid cid.Cid) { } func (pm *Manager) GetPaych(ctx context.Context, from, to address.Address, ensureFree types.BigInt) (address.Address, cid.Cid, error) { - pm.store.lk.Lock() + pm.store.lk.Lock() // unlock only on err; wait funcs will defer unlock var mcid cid.Cid ch, err := pm.store.findChan(func(ci *ChannelInfo) bool { if ci.Direction != DirOutbound { @@ -125,6 +125,7 @@ func (pm *Manager) GetPaych(ctx context.Context, from, to address.Address, ensur return ci.Control == from && ci.Target == to }) if err != nil { + pm.store.lk.Unlock() return address.Undef, cid.Undef, xerrors.Errorf("findChan: %w", err) } if ch != address.Undef { @@ -133,6 +134,8 @@ func (pm *Manager) GetPaych(ctx context.Context, from, to address.Address, ensur } else { mcid, err = pm.createPaych(ctx, from, to, ensureFree) } - + if err != nil { + pm.store.lk.Unlock() + } return ch, mcid, err }