This leak cursor leak can be consistently reproduced by my test program, but it doesn't occur every time you create and delete the cursor.
The files you'll need are: http://www.derkarl.org/~charles/lsm/smaller.trace.bz2 http://www.derkarl.org/~charles/lsm/runlsm.cpp (The latter of which has changed since the last time I provided it to this list) $ cat smaller.trace | valgrind --leak-check=yes ~/a.out lsm ==24046== Memcheck, a memory error detector ==24046== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al. ==24046== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info ==24046== Command: /home/charles/a.out lsm ==24046== ==24046== ==24046== HEAP SUMMARY: ==24046== in use at exit: 39,507 bytes in 24 blocks ==24046== total heap usage: 4,406,026 allocs, 4,406,002 frees, 149,648,738 bytes allocated ==24046== ==24046== 8 bytes in 1 blocks are definitely lost in loss record 1 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40AF95: lsmMallocZero (lsm_mem.c:50) ==24046== by 0x40B000: lsmMallocZeroRc (lsm_mem.c:69) ==24046== by 0x40F5DC: multiCursorAddAll.isra.21 (lsm_sorted.c:2387) ==24046== by 0x40F64C: multiCursorInit (lsm_sorted.c:2400) ==24046== by 0x411C6E: lsmMCursorNew (lsm_sorted.c:2495) ==24046== by 0x40A52F: lsm_csr_open (lsm_main.c:774) ==24046== by 0x405539: main (runlsm.cpp:255) ==24046== ==24046== 9 bytes in 1 blocks are possibly lost in loss record 2 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40B038: lsmReallocOrFree (lsm_mem.c:79) ==24046== by 0x40E501: sortedBlobSet (lsm_sorted.c:373) ==24046== by 0x40EB90: multiCursorCacheKey (lsm_sorted.c:2690) ==24046== by 0x4130E4: lsmMCursorSeek (lsm_sorted.c:3077) ==24046== by 0x405414: main (runlsm.cpp:242) ==24046== ==24046== 24 bytes in 1 blocks are possibly lost in loss record 3 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40AF95: lsmMallocZero (lsm_mem.c:50) ==24046== by 0x41A5AD: lsmPosixOsMutexNew (lsm_unix.c:654) ==24046== by 0x40D59D: lsmDbDatabaseConnect (lsm_shared.c:465) ==24046== by 0x409465: lsm_open (lsm_main.c:188) ==24046== by 0x404B63: main (runlsm.cpp:146) ==24046== ==24046== 24 bytes in 1 blocks are possibly lost in loss record 4 of 22 ==24046== at 0x4C28CCE: realloc (vg_replace_malloc.c:632) ==24046== by 0x41A64E: lsmPosixOsRealloc (lsm_unix.c:499) ==24046== by 0x41AEAE: lsmPosixOsShmMap (lsm_unix.c:400) ==24046== by 0x40BAF7: lsmShmCacheChunks (lsm_shared.c:1688) ==24046== by 0x416F5C: treeShmChunkRc (lsm_tree.c:318) ==24046== by 0x4185AD: lsmTreeInit (lsm_tree.c:1127) ==24046== by 0x449277: lsmLogRecover (lsm_log.c:972) ==24046== by 0x40D7AF: lsmDbDatabaseConnect (lsm_shared.c:365) ==24046== by 0x409465: lsm_open (lsm_main.c:188) ==24046== by 0x404B63: main (runlsm.cpp:146) ==24046== ==24046== 40 bytes in 1 blocks are possibly lost in loss record 5 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40AF95: lsmMallocZero (lsm_mem.c:50) ==24046== by 0x40B000: lsmMallocZeroRc (lsm_mem.c:69) ==24046== by 0x40E14E: multiCursorAllocTree (lsm_sorted.c:2680) ==24046== by 0x41308C: lsmMCursorSeek (lsm_sorted.c:3066) ==24046== by 0x405414: main (runlsm.cpp:242) ==24046== ==24046== 48 bytes in 2 blocks are possibly lost in loss record 6 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40AF95: lsmMallocZero (lsm_mem.c:50) ==24046== by 0x40B000: lsmMallocZeroRc (lsm_mem.c:69) ==24046== by 0x445142: lsmFsOpen (lsm_file.c:660) ==24046== by 0x40D67F: lsmDbDatabaseConnect (lsm_shared.c:506) ==24046== by 0x409465: lsm_open (lsm_main.c:188) ==24046== by 0x404B63: main (runlsm.cpp:146) ==24046== ==24046== 56 bytes in 1 blocks are possibly lost in loss record 7 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40B038: lsmReallocOrFree (lsm_mem.c:79) ==24046== by 0x40E501: sortedBlobSet (lsm_sorted.c:373) ==24046== by 0x413FB2: lsmMCursorValue (lsm_sorted.c:3309) ==24046== by 0x405008: main (runlsm.cpp:205) ==24046== ==24046== 64 bytes in 1 blocks are possibly lost in loss record 8 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x41A8E2: lsmPosixOsOpen (lsm_unix.c:81) ==24046== by 0x40D852: lsmDbDatabaseConnect (lsm_shared.c:412) ==24046== by 0x409465: lsm_open (lsm_main.c:188) ==24046== by 0x404B63: main (runlsm.cpp:146) ==24046== ==24046== 64 bytes in 1 blocks are possibly lost in loss record 9 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x41A8E2: lsmPosixOsOpen (lsm_unix.c:81) ==24046== by 0x444CC4: lsmFsOpenLog (lsm_file.c:561) ==24046== by 0x449253: lsmLogRecover (lsm_log.c:969) ==24046== by 0x40D7AF: lsmDbDatabaseConnect (lsm_shared.c:365) ==24046== by 0x409465: lsm_open (lsm_main.c:188) ==24046== by 0x404B63: main (runlsm.cpp:146) ==24046== ==24046== 96 bytes in 1 blocks are possibly lost in loss record 10 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40AF95: lsmMallocZero (lsm_mem.c:50) ==24046== by 0x40B000: lsmMallocZeroRc (lsm_mem.c:69) ==24046== by 0x449B21: lsmLogBegin (lsm_log.c:371) ==24046== by 0x40C927: lsmBeginWriteTrans (lsm_shared.c:1372) ==24046== by 0x40A8A7: lsm_begin (lsm_main.c:901) ==24046== by 0x40AB95: doWriteOp (lsm_main.c:668) ==24046== by 0x404CCE: main (runlsm.cpp:157) ==24046== ==24046== 110 bytes in 1 blocks are possibly lost in loss record 11 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40D9B1: lsmStringExtend (lsm_str.c:37) ==24046== by 0x449B49: lsmLogBegin (lsm_log.c:374) ==24046== by 0x40C927: lsmBeginWriteTrans (lsm_shared.c:1372) ==24046== by 0x40A8A7: lsm_begin (lsm_main.c:901) ==24046== by 0x40AB95: doWriteOp (lsm_main.c:668) ==24046== by 0x404CCE: main (runlsm.cpp:157) ==24046== ==24046== 120 bytes in 1 blocks are possibly lost in loss record 12 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40AF95: lsmMallocZero (lsm_mem.c:50) ==24046== by 0x40B000: lsmMallocZeroRc (lsm_mem.c:69) ==24046== by 0x40D4F8: lsmDbDatabaseConnect (lsm_shared.c:456) ==24046== by 0x409465: lsm_open (lsm_main.c:188) ==24046== by 0x404B63: main (runlsm.cpp:146) ==24046== ==24046== 128 bytes in 1 blocks are possibly lost in loss record 13 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40AF95: lsmMallocZero (lsm_mem.c:50) ==24046== by 0x40B000: lsmMallocZeroRc (lsm_mem.c:69) ==24046== by 0x443CA7: lsmCheckpointDeserialize (lsm_ckpt.c:969) ==24046== by 0x40C7B1: lsmBeginReadTrans (lsm_shared.c:1181) ==24046== by 0x40A554: lsm_csr_open (lsm_main.c:769) ==24046== by 0x405539: main (runlsm.cpp:255) ==24046== ==24046== 128 bytes in 2 blocks are possibly lost in loss record 14 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x41A8E2: lsmPosixOsOpen (lsm_unix.c:81) ==24046== by 0x445182: lsmFsOpen (lsm_file.c:561) ==24046== by 0x40D67F: lsmDbDatabaseConnect (lsm_shared.c:506) ==24046== by 0x409465: lsm_open (lsm_main.c:188) ==24046== by 0x404B63: main (runlsm.cpp:146) ==24046== ==24046== 136 bytes in 1 blocks are possibly lost in loss record 15 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40B920: lsmShmCacheChunks (lsm_shared.c:1650) ==24046== by 0x40D6BD: lsmDbDatabaseConnect (lsm_shared.c:338) ==24046== by 0x409465: lsm_open (lsm_main.c:188) ==24046== by 0x404B63: main (runlsm.cpp:146) ==24046== ==24046== 136 bytes in 1 blocks are possibly lost in loss record 16 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40BA15: lsmShmCacheChunks (lsm_shared.c:1672) ==24046== by 0x40D6BD: lsmDbDatabaseConnect (lsm_shared.c:338) ==24046== by 0x409465: lsm_open (lsm_main.c:188) ==24046== by 0x404B63: main (runlsm.cpp:146) ==24046== ==24046== 136 bytes in 1 blocks are possibly lost in loss record 17 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40A8DA: lsm_begin (lsm_main.c:889) ==24046== by 0x40AB95: doWriteOp (lsm_main.c:668) ==24046== by 0x404CCE: main (runlsm.cpp:157) ==24046== ==24046== 160 bytes in 1 blocks are possibly lost in loss record 18 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40AF95: lsmMallocZero (lsm_mem.c:50) ==24046== by 0x40B000: lsmMallocZeroRc (lsm_mem.c:69) ==24046== by 0x40E0C3: multiCursorNew (lsm_sorted.c:2410) ==24046== by 0x411C41: lsmMCursorNew (lsm_sorted.c:2494) ==24046== by 0x40A52F: lsm_csr_open (lsm_main.c:774) ==24046== by 0x405539: main (runlsm.cpp:255) ==24046== ==24046== 292 bytes in 1 blocks are possibly lost in loss record 19 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40AF95: lsmMallocZero (lsm_mem.c:50) ==24046== by 0x40B000: lsmMallocZeroRc (lsm_mem.c:69) ==24046== by 0x445015: lsmFsOpen (lsm_file.c:631) ==24046== by 0x40D67F: lsmDbDatabaseConnect (lsm_shared.c:506) ==24046== by 0x409465: lsm_open (lsm_main.c:188) ==24046== by 0x404B63: main (runlsm.cpp:146) ==24046== ==24046== 344 bytes in 1 blocks are possibly lost in loss record 20 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x418667: lsmTreeCursorNew (lsm_tree.c:1922) ==24046== by 0x40F661: multiCursorInit (lsm_sorted.c:2402) ==24046== by 0x411C6E: lsmMCursorNew (lsm_sorted.c:2495) ==24046== by 0x40A52F: lsm_csr_open (lsm_main.c:774) ==24046== by 0x405539: main (runlsm.cpp:255) ==24046== ==24046== 4,608 bytes in 1 blocks are possibly lost in loss record 21 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40AF95: lsmMallocZero (lsm_mem.c:50) ==24046== by 0x409301: lsm_new (lsm_main.c:81) ==24046== by 0x404AD5: main (runlsm.cpp:143) ==24046== ==24046== 32,776 bytes in 1 blocks are possibly lost in loss record 22 of 22 ==24046== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==24046== by 0x41A61B: lsmPosixOsMalloc (lsm_unix.c:472) ==24046== by 0x40AF95: lsmMallocZero (lsm_mem.c:50) ==24046== by 0x40B000: lsmMallocZeroRc (lsm_mem.c:69) ==24046== by 0x4450B6: lsmFsOpen (lsm_file.c:651) ==24046== by 0x40D67F: lsmDbDatabaseConnect (lsm_shared.c:506) ==24046== by 0x409465: lsm_open (lsm_main.c:188) ==24046== by 0x404B63: main (runlsm.cpp:146) ==24046== ==24046== LEAK SUMMARY: ==24046== definitely lost: 8 bytes in 1 blocks ==24046== indirectly lost: 0 bytes in 0 blocks ==24046== possibly lost: 39,499 bytes in 23 blocks ==24046== still reachable: 0 bytes in 0 blocks ==24046== suppressed: 0 bytes in 0 blocks ==24046== ==24046== For counts of detected and suppressed errors, rerun with: -v ==24046== ERROR SUMMARY: 22 errors from 22 contexts (suppressed: 4 from 4) _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users