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);