docker / libkv

Distributed key/value store abstraction library
Apache License 2.0
854 stars 205 forks source link

A race is possible in etcd's Lock() #177

Open debedb opened 7 years ago

debedb commented 7 years ago

Consider line 499:

l.last, err = l.client.Set(context.Background(), l.key, l.value, setOpts)

It is possible for Set() to succeed, and immediately the following call to Set() from a different goroutine to fail - modifying l.last to be nil. Which will then result in Unlock() not issuing a Delete call and so not unlocking.

jlhawn commented 6 years ago

I think this is fixed by #186