From 6dbfc218468d6aa13d0fa5543cbe1fb7d41f3d68 Mon Sep 17 00:00:00 2001 From: Yicheng Qin Date: Tue, 3 Nov 2015 18:54:59 -0800 Subject: [PATCH] storage: delete key instead of setting it to false When getting the watched events, it iterate all keys in putm and delm to generate the events. If we don't delete the key from putm/delm, it would range on the key that is not actually put or deleted. This is incorrect. Fix the panic that happens when single put/delete is watched. --- storage/watchable_store.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/storage/watchable_store.go b/storage/watchable_store.go index 02c790f05..12db37b0a 100644 --- a/storage/watchable_store.go +++ b/storage/watchable_store.go @@ -317,12 +317,16 @@ func newOngoingTx() *ongoingTx { func (tx *ongoingTx) put(k string) { tx.putm[k] = true - tx.delm[k] = false + if _, ok := tx.delm[k]; ok { + delete(tx.delm, k) + } } func (tx *ongoingTx) del(k string) { tx.delm[k] = true - tx.putm[k] = false + if _, ok := tx.putm[k]; ok { + delete(tx.putm, k) + } } type watching struct {