diff --git a/helper/shadow/keyed_value.go b/helper/shadow/keyed_value.go index 5a0b608e4..432b03668 100644 --- a/helper/shadow/keyed_value.go +++ b/helper/shadow/keyed_value.go @@ -58,6 +58,7 @@ func (w *KeyedValue) WaitForChange(k string) interface{} { // If we're closed, we're closed if w.closed { + w.lock.Unlock() return ErrClosed } diff --git a/helper/shadow/keyed_value_test.go b/helper/shadow/keyed_value_test.go index ee4b639eb..c7b440622 100644 --- a/helper/shadow/keyed_value_test.go +++ b/helper/shadow/keyed_value_test.go @@ -312,3 +312,25 @@ func TestKeyedValueWaitForChange_closed(t *testing.T) { t.Fatalf("bad: %#v", val) } } + +func TestKeyedValueWaitForChange_closedFirst(t *testing.T) { + var v KeyedValue + + // Close + v.Close() + + // Verify + val := v.WaitForChange("foo") + if val != ErrClosed { + t.Fatalf("bad: %#v", val) + } + + // Set a value + v.SetValue("foo", 42) + + // Try again + val = v.WaitForChange("foo") + if val != ErrClosed { + t.Fatalf("bad: %#v", val) + } +}