[Soot-list] ThreadLocal class

Eric Bodden bodden at st.informatik.tu-darmstadt.de
Mon Jul 26 03:52:26 EDT 2010


Hello.

Since ThreadLocal is just a java class like any other class, Soot
certainly supports it. I am assuming that you are doing something
wrong in the code generation.

My estimation would be that for every field you need to...

1.) create a new sub-class of ThreadLocal
2.) construct an initialValue method in that subclass
3.) replace the field and assign to it at the right point in time
4.) replace all references to the field

Eric

--
Dr. Eric Bodden
Software Technology Group, Technische Universität Darmstadt, Germany
Tel: +49 6151 16-5478    Fax: +49 6151 16-5410
Mailing Address: S2|02 A209, Hochschulstraße 10, 64289 Darmstadt



On 24 July 2010 17:53, yi zhang <cathy.zhyi at gmail.com> wrote:
> Hi everyone:
>       I am using soot to optimize this code. However, soot seems have
> problem dealing with the ThreadLocal field. Whenever I include the
> ThreadLocal HelloWorld I got error: Exception in thread "main"
> java.lang.NoClassDefFoundError: HelloWorld$1 when running the .class
> generated by soot. When I delete the threadlocal helloworld everything works
> fine. Does soot really support the threadlocal class?
>
>      What I want to do currently is: Give a java class,  change all the
> fields which are static non-volatile to ThreadLocal. I am thinking doing
> this after the soot has loaded all the classes and change them to sootclass
> before any jimple transfromation happans. Could anyone give me some advice
> or clue on how to do this?  Thank you so much.
>
>       import java.io.*;
>
> public class HelloWorld {
>     public static String HelloWorldNormal = "HelloWorld--normal";
>     public static volatile String HelloWorldVolatile =
> "HelloWorld--volatile";
>     private static ThreadLocal <String> HelloWorldThreadLocal = new
> ThreadLocal(){
>         protected String initialValue(){
>         return new String("HelloWorld--threadlocal");
>         }
>     };
>
>     public static void main(String[] arg) {
>     HelloWorld item = new HelloWorld();
>     System.out.println( item.HelloWorldNormal );
>     System.out.println( item.HelloWorldVolatile );
>     //    System.out.println( item.HelloWorldThreadLocal.get());
>     }
> }
>
>
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
>


More information about the Soot-list mailing list