On 2010-07-06 21:56, Mark Hindess wrote:

Regis,

This breaks the build for the IBM VME (from developerWorks).  Since they
don't have a sun.misc.Unsafe, so the AtomicInteger can't be resolved.

Any ideas how to fix this?

Also, the luni.jar manifest says:

   java.util.concurrent;resolution:=optional,

I wonder when it becomes non-optional.  Personally, I'd say breaking
java.io.File would be enough to make it mandatory.

Regards,
  Mark.

In message<20100705030517.1f5722388...@eris.apache.org>, regi...@apache.org
writes:

Author: regisxu
Date: Mon Jul  5 03:05:16 2010
New Revision: 960424

URL: http://svn.apache.org/viewvc?rev=960424&view=rev
Log:
make File.createTempFile thread-safe to avoid to return the same file multipl
e times

File.counter could be accessed by multiple threads, so use AtomicInteger to m
ake
sure each thread using different int value to create temp file.

Modified:
     harmony/enhanced/java/trunk/classlib/modules/luni/src/main/java/java/io/F
ile.java

Modified: harmony/enhanced/java/trunk/classlib/modules/luni/src/main/java/jav
a/io/File.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/classlib/module
s/luni/src/main/java/java/io/File.java?rev=960424&r1=960423&r2=960424&view=di
ff
=============================================================================
=
--- harmony/enhanced/java/trunk/classlib/modules/luni/src/main/java/java/io/F
ile.java (original)
+++ harmony/enhanced/java/trunk/classlib/modules/luni/src/main/java/java/io/F
ile.java Mon Jul  5 03:05:16 2010
@@ -24,6 +24,7 @@ import java.security.AccessController;
  import java.security.SecureRandom;
  import java.util.ArrayList;
  import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;

  import org.apache.harmony.luni.internal.io.FileCanonPathCache;
  import org.apache.harmony.luni.util.DeleteOnExit;
@@ -79,7 +80,7 @@ public class File implements Serializabl
      public static final String pathSeparator;

      /* Temp file counter */
-    private static int counter;
+    private static AtomicInteger counter = new AtomicInteger(0);

      private static boolean caseSensitive;

@@ -1300,13 +1301,13 @@ public class File implements Serializabl
      }

      private static File genTempFile(String prefix, String suffix, File direc
tory) {
-        if (counter == 0) {
+        if (counter.get() == 0) {
              int newInt = new SecureRandom().nextInt();
-            counter = ((newInt / 65535)&  0xFFFF) + 0x2710;
+            counter.compareAndSet(0, ((newInt / 65535)&  0xFFFF) + 0x2710);
          }
          StringBuilder newName = new StringBuilder();
          newName.append(prefix);
-        newName.append(counter++);
+        newName.append(counter.getAndIncrement());
          newName.append(suffix);
          return new File(directory, newName.toString());
      }





Fixed at r961242, instead of using 'synchronized'. I noticed that AbstractSelector.java uses AtomicBoolean, does IBM VME only not support AtomicInteger or AtomicLong?

--
Best Regards,
Regis.

Reply via email to