You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2015/04/17 00:47:11 UTC
svn commit: r1674163 -
/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
Author: yonik
Date: Thu Apr 16 22:47:11 2015
New Revision: 1674163
URL: http://svn.apache.org/r1674163
Log:
SOLR-7411: fix threadsafety bug in SearchHandler introduced in SOLR-7380
Modified:
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java?rev=1674163&r1=1674162&r2=1674163&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java Thu Apr 16 22:47:11 2015
@@ -71,7 +71,7 @@ public class SearchHandler extends Reque
protected static Logger log = LoggerFactory.getLogger(SearchHandler.class);
- protected List<SearchComponent> components = null;
+ protected volatile List<SearchComponent> components;
private ShardHandlerFactory shardHandlerFactory ;
private PluginInfo shfInfo;
private SolrCore core;
@@ -191,20 +191,22 @@ public class SearchHandler extends Reque
}
public List<SearchComponent> getComponents() {
- if (components == null) {
+ List<SearchComponent> result = components; // volatile read
+ if (result == null) {
synchronized (this) {
if (components == null) {
initComponents();
}
+ result = components;
}
}
- return components;
+ return result;
}
@Override
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception
{
- if (components == null) getComponents();
+ List<SearchComponent> components = getComponents();
ResponseBuilder rb = new ResponseBuilder(req, rsp, components);
if (rb.requestInfo != null) {
rb.requestInfo.setResponseBuilder(rb);