Status fields:
creation_ts: | 2011-11-19 22:45 |
---|---|
component: | vm |
version: | default branch |
rep_platform: | All |
op_sys: | All |
bug_status: | RESOLVED |
resolution: | FIXED |
reporter: | stefan@complang.tuwien.ac.at |
The following program demonstrates this. import java.util.concurrent.Semaphore; class M { public static Semaphore sem = new Semaphore(0); } class testglobal { public static String the_string = initializeString(); static String initializeString() { M.sem.release(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return "hullabaloo"; } } public class main { public static void main(String[] args) { new Thread(new Runnable() { public void run() { try { M.sem.acquire(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("after acquire"); System.out.println(String.valueOf(testglobal.the_string.length())); } }).start(); System.out.println(testglobal.the_string); } } It fails most of the time with my GNU classpath build and occasionally with my OpenJDK build, where "failing" means that a NPE is thrown.
http://mips.complang.tuwien.ac.at/hg/cacao/rev/89f8bfc577c7