You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2015/09/19 00:29:45 UTC

[5/6] jena git commit: JENA_1029: Comment about threading and about recursive initialization.

JENA_1029: Comment about threading and about recursive initialization.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/a0a2d0d0
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/a0a2d0d0
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/a0a2d0d0

Branch: refs/heads/Jena-1029_subsystem
Commit: a0a2d0d009e2740f042599bc5f228717bd0d62d4
Parents: d60933e
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Sep 18 22:21:22 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Sep 18 22:21:22 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/jena/system/JenaSystem.java   | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/a0a2d0d0/jena-core/src/main/java/org/apache/jena/system/JenaSystem.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/system/JenaSystem.java b/jena-core/src/main/java/org/apache/jena/system/JenaSystem.java
index 899a344..953e63b 100644
--- a/jena-core/src/main/java/org/apache/jena/system/JenaSystem.java
+++ b/jena-core/src/main/java/org/apache/jena/system/JenaSystem.java
@@ -64,6 +64,22 @@ public class JenaSystem {
      * See {@link #setSubsystemRegistry} to intercept that choice.
      */
     public static void init() {
+        // Any other thread attempting to initialize as well will
+        // first test the volatile outside the lock; if it's 
+        // not INITIALIZED, the thread will attempt to grab the lock
+        // and hence wait, then see initialized as true.
+
+        // But we need to cope with recursive calls of JenaSystem.init() as well.
+        // The same thread will not stop at the lock.
+        // Set initialized to true before a recursive call is possible
+        // handles this.  The recursive call will see initialized true and
+        // and returnn on the first test.
+
+        // Net effect:
+        // After a top level call of JenaSystem.init() returns, tjena has
+        // finishes initialization.
+        // Rececursive calls do not have this property.
+
         if ( initialized )
             return ;
         synchronized(initLock) {
@@ -72,7 +88,7 @@ public class JenaSystem {
                     System.err.println("JenaSystem.init - return");
                 return ;
             } 
-            // Catchs recursive calls, same thread.
+            // Catches recursive calls, same thread.
             initialized = true ;
             if ( DEBUG_INIT )
                 System.err.println("JenaSystem.init - start");