summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2021-02-04 07:51:45 +0100
committerTyge Løvset <[email protected]>2021-02-04 07:51:45 +0100
commit90ebc2d86c62ed2eecf17eeb5d9fddad690b666d (patch)
tree21054bbd058eb918580fc9b6a6e1a982dcfd0eec
parent4bcf3fbfe54f3340ddeaac5406474b42bc350187 (diff)
downloadSTC-modified-90ebc2d86c62ed2eecf17eeb5d9fddad690b666d.tar.gz
STC-modified-90ebc2d86c62ed2eecf17eeb5d9fddad690b666d.zip
Fixed leak in csmap erase.
-rw-r--r--stc/csmap.h5
1 files changed, 2 insertions, 3 deletions
diff --git a/stc/csmap.h b/stc/csmap.h
index d726a836..20889573 100644
--- a/stc/csmap.h
+++ b/stc/csmap.h
@@ -444,19 +444,18 @@ int main(void) {
if (c != 0) \
d[tn].link[c == -1] = C##_##X##_erase_r_(d, d[tn].link[c == -1], rkey, erased); \
else { \
+ if (!*erased) {C##_##X##_value_del(&d[tn].value); *erased = 1;} \
if (d[tn].link[0] && d[tn].link[1]) { \
tx = d[tn].link[0]; \
while (d[tx].link[1]) \
tx = d[tx].link[1]; \
- C##_##X##_value_del(&d[tn].value); \
d[tn].value = d[tx].value; /* move */ \
raw = keyToRaw(KEY_REF_##C(&d[tn].value)); \
d[tn].link[0] = C##_##X##_erase_r_(d, d[tn].link[0], &raw, erased); \
- } else { \
+ } else { /* unlink node */ \
tx = tn; \
tn = d[tn].link[ d[tn].link[0] == 0 ]; \
C##_##X##_node_del_(d, tx); \
- *erased = 1; \
} \
} \
tx = d[tn].link[1]; \