90
91
return func() {
93
>
if removeIdx := int(idx.Swap(-1)); removeIdx >= 0 {
94
>
d.remove(removeIdx)
95
>
}
96
}
97
}
98
100
>
d.lock.Lock()
101
>
102
>
key := d.overrides[idx].key
103
>
// mark this pair deleted
104
>
d.overrides[idx] = kvpair{}
105
>
106
>
// pop all deleted pairs
107
>
for l := len(d.overrides); l > 0 && !d.overrides[l-1].valid; l = len(d.overrides) {
108
d.overrides = d.overrides[:l-1]
109
}
110
112
>
changed := map[Key][]ConstrainedValue{key: newValue}
113
>
114
>
d.lock.Unlock()
115
>
116
>
// do not hold lock while notifying subscriptions
117
>
d.PublishUpdates(changed)
118
}