Author: sshafroi
Date: 2008-07-17 14:16:04 +0200 (Thu, 17 Jul 2008)
New Revision: 6741

Modified:
   
trunk/query-api/src/main/java/no/sesat/search/query/parser/AbstractLeafClause.java
   
trunk/query-api/src/main/java/no/sesat/search/query/parser/AbstractOperationClause.java
Log:
SEARC-2837 - NPE in AbstractAlternation.leftChild

The problem was that creating the clauses and putting them in the hash table 
for later reuse is not synchronized. This is manifested when the parent finder 
looks for a parent and the child has been created twice, leading to a false in 
equals since it's actually another object. 

Solution: 
Synchronize creation of clause's. We might want to make the synchronization 
less wide. I would also like a review of this.



Modified: 
trunk/query-api/src/main/java/no/sesat/search/query/parser/AbstractLeafClause.java
===================================================================
--- 
trunk/query-api/src/main/java/no/sesat/search/query/parser/AbstractLeafClause.java
  2008-07-17 12:06:46 UTC (rev 6740)
+++ 
trunk/query-api/src/main/java/no/sesat/search/query/parser/AbstractLeafClause.java
  2008-07-17 12:16:04 UTC (rev 6741)
@@ -61,7 +61,7 @@
      * @return Either a clause already in use that matches this term and field,
      *   or a newly created cluase for this term and field.
      */
-    public static <T extends AbstractLeafClause> T createClause(
+    public synchronized static <T extends AbstractLeafClause> T createClause(
             final Class<T> clauseClass,
             final String term,
             final String field,

Modified: 
trunk/query-api/src/main/java/no/sesat/search/query/parser/AbstractOperationClause.java
===================================================================
--- 
trunk/query-api/src/main/java/no/sesat/search/query/parser/AbstractOperationClause.java
     2008-07-17 12:06:46 UTC (rev 6740)
+++ 
trunk/query-api/src/main/java/no/sesat/search/query/parser/AbstractOperationClause.java
     2008-07-17 12:16:04 UTC (rev 6741)
@@ -62,7 +62,7 @@
      * @param weakCache the map containing the key to WeakReference (of the 
Clause) mappings.
      * @return Either a clause already in use that matches this term and 
field, or a newly created cluase for this term and field.
      */
-    public static <T extends AbstractOperationClause> T createClause(
+    public static synchronized <T extends AbstractOperationClause> T 
createClause(
             final Class<T> clauseClass,
             final String term,
             final Clause left,

_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits

Reply via email to