From da1ad20194a04694d2055b9f33a7ed095a5ddefe Mon Sep 17 00:00:00 2001 From: William Morgan Date: Sun, 9 Nov 2008 20:16:38 -0800 Subject: [PATCH] make #load_entry_for_id return something safely useable outside the index mutex --- lib/sup/index.rb | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/sup/index.rb b/lib/sup/index.rb index e585478..cda5cee 100644 --- a/lib/sup/index.rb +++ b/lib/sup/index.rb @@ -416,10 +416,14 @@ EOS def drop_entry docno; @index_mutex.synchronize { @index.delete docno } end def load_entry_for_id mid - results = @index_mutex.synchronize { @index.search Ferret::Search::TermQuery.new(:message_id, mid) } - return if results.total_hits == 0 - docid = results.hits[0].doc - [docid, @index_mutex.synchronize { @index[docid] } ] + @index_mutex.synchronize do + results = @index.search Ferret::Search::TermQuery.new(:message_id, mid) + return if results.total_hits == 0 + docid = results.hits[0].doc + entry = @index[docid] + entry_dup = entry.fields.inject({}) { |h, f| h[f] = entry[f]; h } + [docid, entry_dup] + end end def load_contacts emails, h={} @@ -465,7 +469,7 @@ EOS q = Ferret::Search::BooleanQuery.new q.add_query Ferret::Search::TermQuery.new("source_id", source.id.to_s), :must q.add_query Ferret::Search::TermQuery.new("label", label.to_s), :must - @index_mutex.synchronize { index.search(q, :limit => 1).total_hits > 0 } + @index_mutex.synchronize { @index.search(q, :limit => 1).total_hits > 0 } end protected -- 2.45.2