In sqlite3Fts3Matchinfo():

Near the end of the function, I added two lines:

  if( rc!=SQLITE_OK ){
    sqlite3_result_error_code(pContext, rc);
  }else{
    int n = pCsr->nMatchinfo * sizeof(u32);
    sqlite3_result_blob(pContext, pCsr->aMatchinfo, n, SQLITE_TRANSIENT);
ADDED:    sqlite3_free(pCsr->aMatchinfo);
ADDED:   pCsr->aMatchinfo = 0;
  }

Notes:

1. I added these two lines while obtaining zero actual understanding of the internals of sqlite. Like a monkey typing random characters, I opened vi and hit keys until the leak went away. I have no reason to believe these lines are correct. All I know is that our test suite shows some memory leaks unless these two lines are present.

2. I first did this fix back when 3.7.5 was released. And then I procrastinated about submitting the patch to the mailing list, because I wanted to wait until I could say something insightful about sqlite internals, to make me look smarter than the aforementioned monkey. Anyway, we've got over a year of experience running with "sqlite 3.7.5 plus this patch", and no problems.

3. This week we upgraded to 3.7.11 and the leaks showed up again. So I reapplied this little patch, and the leaks went away again. And this time, I have decided not to let my cluelessness prevent me from letting you folks know about it.

So, FWIW, there it is.  :-)

--
E

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to