diff options
| author | Tyge Løvset <[email protected]> | 2021-02-04 07:51:45 +0100 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2021-02-04 07:51:45 +0100 |
| commit | 90ebc2d86c62ed2eecf17eeb5d9fddad690b666d (patch) | |
| tree | 21054bbd058eb918580fc9b6a6e1a982dcfd0eec | |
| parent | 4bcf3fbfe54f3340ddeaac5406474b42bc350187 (diff) | |
| download | STC-modified-90ebc2d86c62ed2eecf17eeb5d9fddad690b666d.tar.gz STC-modified-90ebc2d86c62ed2eecf17eeb5d9fddad690b666d.zip | |
Fixed leak in csmap erase.
| -rw-r--r-- | stc/csmap.h | 5 |
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]; \
|
