From d19649680223fb1a897928fab673f2e831bf37bc Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Thu, 2 Jun 2022 17:08:17 +0200 Subject: [PATCH] Make the Searcher owning the stored Reader If we keep a reference to a `Reader` it is better to (share) owning the reference. Else the reader may be deleted after we create the searcher. This is especially the case now we are creating the `Reader` at demand and we don't store it in the library's cache. --- include/searcher.h | 6 +++--- src/searcher.cpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/searcher.h b/include/searcher.h index 4381c1d30..c60561494 100644 --- a/include/searcher.h +++ b/include/searcher.h @@ -76,10 +76,10 @@ class Searcher * @return true if the reader has been added. * false if the reader cannot be added (no embedded fulltext index present) */ - bool add_reader(Reader* reader); + bool add_reader(std::shared_ptr reader); - Reader* get_reader(int index); + std::shared_ptr get_reader(int index); /** * Start a search on the zim associated to the Searcher. @@ -161,7 +161,7 @@ class Searcher const unsigned int maxResultCount, const bool verbose = false); - std::vector readers; + std::vector> readers; std::unique_ptr internal; std::unique_ptr suggestionInternal; std::string searchPattern; diff --git a/src/searcher.cpp b/src/searcher.cpp index 7e7403027..9f8ceed67 100644 --- a/src/searcher.cpp +++ b/src/searcher.cpp @@ -89,13 +89,13 @@ Searcher::~Searcher() { } -bool Searcher::add_reader(Reader* reader) +bool Searcher::add_reader(std::shared_ptr reader) { if (!reader->hasFulltextIndex()) { return false; } - for ( const Reader* const existing_reader : readers ) { + for ( auto existing_reader : readers ) { if ( existing_reader->getZimArchive()->getUuid() == reader->getZimArchive()->getUuid() ) return false; } @@ -105,7 +105,7 @@ bool Searcher::add_reader(Reader* reader) } -Reader* Searcher::get_reader(int readerIndex) +std::shared_ptr Searcher::get_reader(int readerIndex) { return readers.at(readerIndex); }