diff options
author | Michael Cahill <michael.cahill@wiredtiger.com> | 2013-03-26 16:26:10 +1100 |
---|---|---|
committer | Michael Cahill <michael.cahill@wiredtiger.com> | 2013-03-26 16:26:10 +1100 |
commit | 3aa9940846b7b66875770884844cc1121ed24f1b (patch) | |
tree | 8e55cb9df304e3eb2db59e0e9342764027ba1d35 | |
parent | ed3d9ff846284efff48f36b954f8e42ae73ce4ac (diff) | |
download | mongo-3aa9940846b7b66875770884844cc1121ed24f1b.tar.gz |
Fix a leak in eviction detected by valgrind.
832,394 (518,080 direct, 314,314 indirect) bytes in 32,380 blocks are definitely lost in loss record 61 of 61
at 0x4A06B6F: calloc (vg_replace_malloc.c:593)
by 0x413A0D: __wt_calloc (os_alloc.c:38)
by 0x436131: __wt_rec_evict (rec_evict.c:207)
by 0x4235DE: __evict_page (bt_evict.c:511)
by 0x42428E: __wt_evict_lru_page (bt_evict.c:1235)
by 0x42506A: __wt_cache_evict_server (bt_evict.c:870)
by 0x3E39407D14: start_thread (pthread_create.c:308)
by 0x3E38CF246C: clone (clone.S:114)
-rw-r--r-- | src/btree/rec_write.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/btree/rec_write.c b/src/btree/rec_write.c index a7056365cad..a01aa35883e 100644 --- a/src/btree/rec_write.c +++ b/src/btree/rec_write.c @@ -835,6 +835,10 @@ __rec_child_deleted(WT_SESSION_IMPL *session, __wt_get_addr(page, ref, &addr, &size); WT_RET(bm->free(bm, session, addr, size)); + if (__wt_off_page(page, ref->addr)) { + __wt_free(session, ((WT_ADDR *)ref->addr)->addr); + __wt_free(session, ref->addr); + } ref->addr = NULL; } @@ -3772,6 +3776,11 @@ __rec_write_wrapup(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_PAGE *page) */ __wt_get_addr(page->parent, ref, &addr, &size); WT_RET(bm->free(bm, session, addr, size)); + if (__wt_off_page(page->parent, ref->addr)) { + __wt_free( + session, ((WT_ADDR *)ref->addr)->addr); + __wt_free(session, ref->addr); + } ref->addr = NULL; } break; |