[Mulgara-svn] r1032 - in trunk/src/jar: itql/java/org/mulgara/itql rdql/java/org/mulgara/rdql

ronald at mulgara.org ronald at mulgara.org
Mon Jun 30 13:02:20 UTC 2008


Author: ronald
Date: 2008-06-30 06:02:19 -0700 (Mon, 30 Jun 2008)
New Revision: 1032

Modified:
   trunk/src/jar/itql/java/org/mulgara/itql/TqlInterpreter.java
   trunk/src/jar/rdql/java/org/mulgara/rdql/RdqlInterpreter.java
Log:
Fix spurious lexer and parser failures. The constructors of the generated
lexers and parsers are not thread safe as they set a static variable without
any form of synchronization. By creating an instance of these in a static
initializer we are guaranteed the necessary synchronization.


Modified: trunk/src/jar/itql/java/org/mulgara/itql/TqlInterpreter.java
===================================================================
--- trunk/src/jar/itql/java/org/mulgara/itql/TqlInterpreter.java	2008-06-27 20:23:34 UTC (rev 1031)
+++ trunk/src/jar/itql/java/org/mulgara/itql/TqlInterpreter.java	2008-06-30 13:02:19 UTC (rev 1032)
@@ -74,6 +74,11 @@
   /** The logger */
   static final Logger logger = Logger.getLogger(TqlInterpreter.class.getName());
 
+  static {
+    // force initialization of static, unsynchronized variables inside these classes
+    new Parser(new Lexer2());
+  }
+
   /** A constraint expression builder. */
   private ConstraintExpressionBuilder builder = new ConstraintExpressionBuilder(this);
 
@@ -1509,7 +1514,7 @@
     return o;
   }
 
-  private class Lexer2 extends Lexer {
+  private static class Lexer2 extends Lexer {
   
     int commandCount = 0;
     final LinkedList<Token> leftoverTokenList = new LinkedList<Token>();

Modified: trunk/src/jar/rdql/java/org/mulgara/rdql/RdqlInterpreter.java
===================================================================
--- trunk/src/jar/rdql/java/org/mulgara/rdql/RdqlInterpreter.java	2008-06-27 20:23:34 UTC (rev 1031)
+++ trunk/src/jar/rdql/java/org/mulgara/rdql/RdqlInterpreter.java	2008-06-30 13:02:19 UTC (rev 1032)
@@ -78,6 +78,11 @@
   private final static Logger logger =
       Logger.getLogger(RdqlInterpreter.class.getName());
 
+  static {
+    // force initialization of static, unsynchronized variables inside these classes
+    new Parser(new RdqlLexer());
+  }
+
   //
   // Members
   //




More information about the Mulgara-svn mailing list