changeset 5185:db2286df9149

made Logger thread-safe by using a ThreadLocal
author Doug Simon <doug.simon@oracle.com>
date Tue, 03 Apr 2012 09:43:21 +0200
parents 70aaaa83b93a
children b00e56aa159d
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/logging/Logger.java
diffstat 1 files changed, 33 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/logging/Logger.java	Mon Apr 02 12:19:18 2012 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/logging/Logger.java	Tue Apr 03 09:43:21 2012 +0200
@@ -33,13 +33,27 @@
 
     public static final boolean ENABLED = Boolean.valueOf(System.getProperty("graal.debug"));
     private static final int SPACING = 4;
-    private static Deque<Boolean> openStack = new LinkedList<>();
-    private static boolean open = false;
-    private static int level = 0;
+    private static final ThreadLocal<Logger> loggerTL;
+
+    private Deque<Boolean> openStack = new LinkedList<>();
+    private boolean open = false;
+    private int level = 0;
 
     private static final PrintStream out;
 
     static {
+        if (ENABLED) {
+            loggerTL = new ThreadLocal<Logger>() {
+                @Override
+                protected Logger initialValue() {
+                    return new Logger();
+                }
+            };
+        } else {
+            loggerTL = null;
+        }
+
+
         PrintStream ps = null;
         String filename = System.getProperty("graal.info_file");
         if (filename != null && !"".equals(filename)) {
@@ -70,12 +84,13 @@
 
     public static void log(String message) {
         if (ENABLED) {
+            Logger logger = loggerTL.get();
             for (String line : message.split("\n")) {
-                if (open) {
+                if (logger.open) {
                     System.out.println("...");
-                    open = false;
+                    logger.open = false;
                 }
-                System.out.print(space(level));
+                System.out.print(space(logger.level));
                 System.out.println(line);
             }
         }
@@ -83,27 +98,29 @@
 
     public static void startScope(String message) {
         if (ENABLED) {
-            if (open) {
+            Logger logger = loggerTL.get();
+            if (logger.open) {
                 System.out.println("...");
-                open = false;
+                logger.open = false;
             }
-            System.out.print(space(level));
+            System.out.print(space(logger.level));
             System.out.print(message);
-            openStack.push(open);
-            open = true;
-            level++;
+            logger.openStack.push(logger.open);
+            logger.open = true;
+            logger.level++;
         }
     }
 
     public static void endScope(String message) {
         if (ENABLED) {
-            level--;
-            if (open) {
+            Logger logger = loggerTL.get();
+            logger.level--;
+            if (logger.open) {
                 System.out.println(message);
             } else {
-                System.out.println(space(level) + "..." + message);
+                System.out.println(space(logger.level) + "..." + message);
             }
-            open = openStack.pop();
+            logger.open = logger.openStack.pop();
         }
     }