Use javaassist to make fields we're accessing volatile

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

Branch: refs/heads/CURATOR-3.0
Commit: 73b05aac94099dd1c1e5684d50a51078ae844e0e
Parents: d110cbb
Author: randgalt <randg...@apache.org>
Authored: Wed Sep 9 13:35:18 2015 -0500
Committer: randgalt <randg...@apache.org>
Committed: Wed Sep 9 13:35:18 2015 -0500

----------------------------------------------------------------------
 .../apache/curator/test/ByteCodeRewrite.java    | 34 ++++++++++++++++++++
 1 file changed, 34 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/73b05aac/curator-test/src/main/java/org/apache/curator/test/ByteCodeRewrite.java
----------------------------------------------------------------------
diff --git 
a/curator-test/src/main/java/org/apache/curator/test/ByteCodeRewrite.java 
b/curator-test/src/main/java/org/apache/curator/test/ByteCodeRewrite.java
index eeca3d4..d8a1c3a 100644
--- a/curator-test/src/main/java/org/apache/curator/test/ByteCodeRewrite.java
+++ b/curator-test/src/main/java/org/apache/curator/test/ByteCodeRewrite.java
@@ -22,8 +22,10 @@ package org.apache.curator.test;
 import javassist.CannotCompileException;
 import javassist.ClassPool;
 import javassist.CtClass;
+import javassist.CtField;
 import javassist.CtMethod;
 import javassist.NotFoundException;
+import javassist.bytecode.AccessFlag;
 
 public class ByteCodeRewrite
 {
@@ -73,6 +75,26 @@ public class ByteCodeRewrite
             {
                 // ignore
             }
+
+            try
+            {
+                CtClass cc = 
pool.get("org.apache.zookeeper.server.ZooKeeperServerMain");
+                makeVolatile(cc);
+            }
+            catch ( NotFoundException e )
+            {
+                // ignore
+            }
+
+            try
+            {
+                CtClass cc = 
pool.get("org.apache.zookeeper.server.ServerCnxnFactory");
+                makeVolatile(cc);
+            }
+            catch ( NotFoundException e )
+            {
+                // ignore
+            }
         }
         catch ( Exception e )
         {
@@ -80,6 +102,18 @@ public class ByteCodeRewrite
         }
     }
 
+    private static void makeVolatile(CtClass cc) throws CannotCompileException
+    {
+        for ( CtField field : cc.getDeclaredFields() )
+        {
+            if ( (field.getModifiers() & (AccessFlag.ABSTRACT | 
AccessFlag.NATIVE | AccessFlag.SYNTHETIC | AccessFlag.STATIC | 
AccessFlag.FINAL)) == 0 )
+            {
+                field.setModifiers(field.getModifiers() | AccessFlag.VOLATILE);
+            }
+        }
+        cc.toClass();
+    }
+
     private static void fixMethods(CtClass cc, String... methodNames) throws 
CannotCompileException
     {
         for ( CtMethod method : cc.getDeclaredMethods() )

Reply via email to