ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/jsr166e/CompletableFuture.java
(Generate patch)

Comparing jsr166/src/jsr166e/CompletableFuture.java (file contents):
Revision 1.4 by jsr166, Thu Jan 3 07:01:49 2013 UTC vs.
Revision 1.6 by jsr166, Wed Jan 9 02:51:36 2013 UTC

# Line 83 | Line 83 | public class CompletableFuture<T> implem
83      /*
84       * Overview:
85       *
86 <     * 1. Non-nullness of field result (set via CAS) indicates
87 <     * done. An AltResult is used to box null as a result, as well as
88 <     * to hold exceptions.  Using a single field makes completion fast
86 >     * 1. Non-nullness of field result (set via CAS) indicates done.
87 >     * An AltResult is used to box null as a result, as well as to
88 >     * hold exceptions.  Using a single field makes completion fast
89       * and simple to detect and trigger, at the expense of a lot of
90       * encoding and decoding that infiltrates many methods. One minor
91       * simplification relies on the (static) NIL (to box null results)
# Line 2700 | Line 2700 | public class CompletableFuture<T> implem
2700      private static sun.misc.Unsafe getUnsafe() {
2701          try {
2702              return sun.misc.Unsafe.getUnsafe();
2703 <        } catch (SecurityException se) {
2704 <            try {
2705 <                return java.security.AccessController.doPrivileged
2706 <                    (new java.security
2707 <                     .PrivilegedExceptionAction<sun.misc.Unsafe>() {
2708 <                        public sun.misc.Unsafe run() throws Exception {
2709 <                            java.lang.reflect.Field f = sun.misc
2710 <                                .Unsafe.class.getDeclaredField("theUnsafe");
2711 <                            f.setAccessible(true);
2712 <                            return (sun.misc.Unsafe) f.get(null);
2713 <                        }});
2714 <            } catch (java.security.PrivilegedActionException e) {
2715 <                throw new RuntimeException("Could not initialize intrinsics",
2716 <                                           e.getCause());
2717 <            }
2703 >        } catch (SecurityException tryReflectionInstead) {}
2704 >        try {
2705 >            return java.security.AccessController.doPrivileged
2706 >            (new java.security.PrivilegedExceptionAction<sun.misc.Unsafe>() {
2707 >                public sun.misc.Unsafe run() throws Exception {
2708 >                    Class<sun.misc.Unsafe> k = sun.misc.Unsafe.class;
2709 >                    for (java.lang.reflect.Field f : k.getDeclaredFields()) {
2710 >                        f.setAccessible(true);
2711 >                        Object x = f.get(null);
2712 >                        if (k.isInstance(x))
2713 >                            return k.cast(x);
2714 >                    }
2715 >                    throw new NoSuchFieldError("the Unsafe");
2716 >                }});
2717 >        } catch (java.security.PrivilegedActionException e) {
2718 >            throw new RuntimeException("Could not initialize intrinsics",
2719 >                                       e.getCause());
2720          }
2721      }
2720
2722   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines