]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a pair of memory leaks. These were turned up by running valgrind
authorshess <shess@noemail.net>
Tue, 31 Oct 2006 18:13:42 +0000 (18:13 +0000)
committershess <shess@noemail.net>
Tue, 31 Oct 2006 18:13:42 +0000 (18:13 +0000)
memcheck with various 10k doc insert, update, delete, and query tests. (CVS 3497)

FossilOrigin-Name: 3cd9b64b96018f69163ad0be0b5c07dd1be6abc6

ext/fts2/fts2.c
manifest
manifest.uuid

index 772e6ce04422fb8eb9f6a6f2a0322fd707bb13be..fa091bb0d1ec44b4a3a15991e2545d96eb760121 100644 (file)
@@ -3691,7 +3691,7 @@ static void interiorWriterAppend(InteriorWriter *pWriter,
 }
 
 /* Free the space used by pWriter, including the linked-list of
-** InteriorBlocks.
+** InteriorBlocks, and parentWriter, if present.
 */
 static int interiorWriterDestroy(InteriorWriter *pWriter){
   InteriorBlock *block = pWriter->first;
@@ -3703,6 +3703,10 @@ static int interiorWriterDestroy(InteriorWriter *pWriter){
     dataBufferDestroy(&b->data);
     free(b);
   }
+  if( pWriter->parentWriter!=NULL ){
+    interiorWriterDestroy(pWriter->parentWriter);
+    free(pWriter->parentWriter);
+  }
   SCRAMBLE(pWriter);
   return SQLITE_OK;
 }
@@ -3843,6 +3847,26 @@ static int interiorReaderTermCmp(InteriorReader *pReader,
 /****************************************************************/
 /* LeafWriter is used to collect terms and associated doclist data
 ** into leaf blocks in %_segments (see top of file for format info).
+** Expected usage is:
+**
+** LeafWriter writer;
+** leafWriterInit(0, 0, &writer);
+** while( sorted_terms_left_to_process ){
+**   // data is doclist data for that term.
+**   rc = leafWriterStep(v, &writer, pTerm, nTerm, pData, nData);
+**   if( rc!=SQLITE_OK ) goto err;
+** }
+** rc = leafWriterFinalize(v, &writer);
+**err:
+** leafWriterDestroy(&writer);
+** return rc;
+**
+** leafWriterStep() may write a collected leaf out to %_segments.
+** leafWriterFinalize() finishes writing any buffered data and stores
+** a root node in %_segdir.  leafWriterDestroy() frees all buffers and
+** InteriorWriters allocated as part of writing this segment.
+**
+** TODO(shess) Document leafWriterStepMerge().
 */
 
 /* Put terms with data this big in their own block. */
@@ -4879,6 +4903,7 @@ static int writeZeroSegment(fulltext_vtab *v, fts2Hash *pTerms){
     dlwDestroy(&dlw);
     if( rc!=SQLITE_OK ) goto err;
   }
+  dataBufferDestroy(&dl);
   rc = leafWriterFinalize(v, &writer);
 
  err:
index 22c8f80e3ec6e945fe25779b7572ff0f500ec635..9df4d061c2be9b3b2094c7b971b427489c44c96c 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Make\sthe\scommand-line\sshell\s".dump"\scommand\smore\sresilient\sin\sthe\sface\sof\ndatabase\scorruption.\s(CVS\s3496)
-D 2006-10-31T18:08:28
+C Fix\sa\spair\sof\smemory\sleaks.\s\sThese\swere\sturned\sup\sby\srunning\svalgrind\nmemcheck\swith\svarious\s10k\sdoc\sinsert,\supdate,\sdelete,\sand\squery\stests.\s(CVS\s3497)
+D 2006-10-31T18:13:42
 F Makefile.in 4379c909d46b38b8c5db3533084601621d4f14b2
 F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -33,7 +33,7 @@ F ext/fts1/fulltext.h 08525a47852d1d62a0be81d3fc3fe2d23b094efd
 F ext/fts1/simple_tokenizer.c 1844d72f7194c3fd3d7e4173053911bf0661b70d
 F ext/fts1/tokenizer.h 0c53421b832366d20d720d21ea3e1f6e66a36ef9
 F ext/fts2/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
-F ext/fts2/fts2.c 10fe8d96a95ad09814d4a06049385b60b204e3a9
+F ext/fts2/fts2.c afa395abf388451241f807832faef20b82c2eb09
 F ext/fts2/fts2.h bbdab26d34f91974d5b9ade8b7836c140a7c4ce1
 F ext/fts2/fts2_hash.c b3f22116d4ef0bc8f2da6e3fdc435c86d0951a9b
 F ext/fts2/fts2_hash.h e283308156018329f042816eb09334df714e105e
@@ -419,7 +419,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
 F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
-P 9fa3ae584ae4936696fd2f23a64697f0409ef313
-R 000cdc41e58c246d195b79d7b5adbe9e
-U drh
-Z b666da97eed5e567b2c6e3fa005b845f
+P ebd44f0b5e229b990910bb44565de9a5c06cb5bc
+R fe3226a176e6e12982c395f0f1608ad5
+U shess
+Z a00c74ece01627ee9169044aee533e83
index bca976778684602e32a1242bc29d53a9ae0d94a1..587ab14ef2fd12824ac6ab7396e8addee86a7f44 100644 (file)
@@ -1 +1 @@
-ebd44f0b5e229b990910bb44565de9a5c06cb5bc
\ No newline at end of file
+3cd9b64b96018f69163ad0be0b5c07dd1be6abc6
\ No newline at end of file