[
https://issues.apache.org/jira/browse/LUCY-315?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Nick Wellnhofer updated LUCY-315:
---------------------------------
Summary: Memory leak in HitQueue with SortSpec (was: Memory leak in
sortSpec)
> Memory leak in HitQueue with SortSpec
> -------------------------------------
>
> Key: LUCY-315
> URL: https://issues.apache.org/jira/browse/LUCY-315
> Project: Lucy
> Issue Type: Bug
> Components: C bindings
> Affects Versions: 0.6.0
> Reporter: Serkan Mulayim
> Fix For: 0.6.1
>
>
> A possible memory leak in the usage of SortSpec in IndexSearcher.
> You can find the simple code at the end of this description demonstrating the
> issue. (sorry JIRA does not allow me to attach a file). Please do not
> concentrate on the 2 functions, testing_get_query and testing_get_schema.
> They do not cause any memory leaks, and not included in the code.
> Please see the line "Hits *hits = IxSearcher_Hits(searcher, (Obj*)query, 0,
> 10, sortSpec);" in the code.
> When we use a SortSpec in the searcher "IxSearcher_Hits(searcher,
> (Obj*)query, 0, 10, sortSpec)", valgrind detects a memory leak (24 bytes
> definitely lost).
> When we change ONLY one line to "IxSearcher_Hits(searcher, (Obj*)query, 0,
> 10, NULL)", valgrind does not detect the memory leaks. The only difference
> is changing the sortSpec variable with NULL. In the code SortSpec is still
> being created the same way and DECREFfed the same way. I suspect that the
> issue is in DECREF(searcher) and it is not cleaning up some objects in
> searcher that are related to the sortSpec.
> Valgrind command is "valgrind --leak-check=full --show-leak-kinds=all
> vectortest".
> Output when sortSpec is passed into the IxSearcher_Hits, valgrind output is
> as following:
> ==67956== LEAK SUMMARY:
> ==67956== definitely lost: 24 bytes in 1 blocks
> ==67956== indirectly lost: 0 bytes in 0 blocks
> ==67956== possibly lost: 0 bytes in 0 blocks
> ==67956== still reachable: 223,323 bytes in 4,919 blocks
> ==67956== suppressed: 34,896 bytes in 427 blocks
> Output when NULL is passed into the IxSearcher_Hits, valgrind output is as
> following:
> ==67818== LEAK SUMMARY:
> ==67818== definitely lost: 0 bytes in 0 blocks
> ==67818== indirectly lost: 0 bytes in 0 blocks
> ==67818== possibly lost: 0 bytes in 0 blocks
> ==67818== still reachable: 223,323 bytes in 4,919 blocks
> ==67818== suppressed: 34,896 bytes in 427 blocks
> -----------------------------------------Code:
> test.c-----------------------------------------------
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #define CFISH_USE_SHORT_NAMES
> #define LUCY_USE_SHORT_NAMES
> #include "Lucy/Plan/Schema.h"
> #include "Lucy/Plan/StringType.h"
> #include "Lucy/Plan/FullTextType.h"
> #include "Lucy/Analysis/EasyAnalyzer.h"
> #include "Lucy/Index/Indexer.h"
> #include "Lucy/Search/QueryParser.h"
> #include "Lucy/Search/RangeQuery.h"
> #include "Lucy/Search/ANDQuery.h"
> #include "Lucy/Search/SortRule.h"
> #include "Lucy/Search/SortSpec.h"
> #include "Lucy/Search/Hits.h"
> #include "Lucy/Document/HitDoc.h"
> #include "Lucy/Search/IndexSearcher.h"
> #include "Clownfish/Vector.h"
> #include "Clownfish/String.h"
> #define SEARCH_FIELD_INGESTION_DATE "ingestionDate"
> static Query* testing_get_query(Schema *schema, const char * query_str, const
> char* startDate, const char *endDate);
> static Schema* testing_get_schema(char* lang);
> int main() \{
> lucy_bootstrap_parcel();
> Schema* schema = testing_get_schema("en");
> String *folder = Str_newf("%s/%s", "searchIndex", "testIndex1");
> Query *query = testing_get_query(schema, "hello", "0000000000000",
> "9999999999999");
> IndexSearcher *searcher = IxSearcher_new((Obj*) folder);
> String *field_date_str = Str_newf(SEARCH_FIELD_INGESTION_DATE);
> SortRule *sortRule = SortRule_new(SortRule_FIELD, field_date_str, 0);
> Vector *sortRules = Vec_new(1);
> Vec_Push(sortRules, (Obj*) sortRule);
> SortSpec *sortSpec = SortSpec_new(sortRules);
> Hits *hits = IxSearcher_Hits(searcher, (Obj*) query, 0, 10, sortSpec);
> DECREF(field_date_str);
> DECREF(sortRules);
> DECREF(sortSpec);
> DECREF(schema);
> DECREF(folder);
> DECREF(query);
> DECREF(hits);
> DECREF(searcher);
> \}
> --------------------------------------------------------------------------------------------------------
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)