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

Comparing jsr166/src/jsr166e/StampedLock.java (file contents):
Revision 1.22 by jsr166, Wed Oct 17 00:02:47 2012 UTC vs.
Revision 1.26 by jsr166, Wed Jan 9 02:51:37 2013 UTC

# Line 156 | Line 156 | import java.util.concurrent.TimeUnit;
156   *         }
157   *       }
158   *     } finally {
159 < *        sl.unlock(stamp);
159 > *       sl.unlock(stamp);
160   *     }
161   *   }
162   * }}</pre>
# Line 226 | Line 226 | public class StampedLock implements java
226       * threads.  Both await methods use a similar spin strategy: If
227       * the associated queue appears to be empty, then the thread
228       * spin-waits up to SPINS times (where each iteration decreases
229 <     * spin count with 50% probability) before enqueing, and then, if
229 >     * spin count with 50% probability) before enqueuing, and then, if
230       * it is the first thread to be enqueued, spins again up to SPINS
231       * times before blocking. If, upon wakening it fails to obtain
232       * lock, and is still (or becomes) the first waiting thread (which
# Line 995 | Line 995 | public class StampedLock implements java
995                          else if ((time = deadline - System.nanoTime()) <= 0L)
996                              return cancelWriter(node, false);
997                          if (node.prev == p && p.status == WAITING &&
998 <                            (p != whead || (state & WBIT) != 0L)) // recheck
998 >                            (p != whead || (state & ABITS) != 0L)) // recheck
999                              U.park(false, time);
1000                          if (interruptible && Thread.interrupted())
1001                              return cancelWriter(node, true);
# Line 1204 | Line 1204 | public class StampedLock implements java
1204      private static sun.misc.Unsafe getUnsafe() {
1205          try {
1206              return sun.misc.Unsafe.getUnsafe();
1207 <        } catch (SecurityException se) {
1208 <            try {
1209 <                return java.security.AccessController.doPrivileged
1210 <                    (new java.security
1211 <                     .PrivilegedExceptionAction<sun.misc.Unsafe>() {
1212 <                        public sun.misc.Unsafe run() throws Exception {
1213 <                            java.lang.reflect.Field f = sun.misc
1214 <                                .Unsafe.class.getDeclaredField("theUnsafe");
1215 <                            f.setAccessible(true);
1216 <                            return (sun.misc.Unsafe) f.get(null);
1217 <                        }});
1218 <            } catch (java.security.PrivilegedActionException e) {
1219 <                throw new RuntimeException("Could not initialize intrinsics",
1220 <                                           e.getCause());
1221 <            }
1207 >        } catch (SecurityException tryReflectionInstead) {}
1208 >        try {
1209 >            return java.security.AccessController.doPrivileged
1210 >            (new java.security.PrivilegedExceptionAction<sun.misc.Unsafe>() {
1211 >                public sun.misc.Unsafe run() throws Exception {
1212 >                    Class<sun.misc.Unsafe> k = sun.misc.Unsafe.class;
1213 >                    for (java.lang.reflect.Field f : k.getDeclaredFields()) {
1214 >                        f.setAccessible(true);
1215 >                        Object x = f.get(null);
1216 >                        if (k.isInstance(x))
1217 >                            return k.cast(x);
1218 >                    }
1219 >                    throw new NoSuchFieldError("the Unsafe");
1220 >                }});
1221 >        } catch (java.security.PrivilegedActionException e) {
1222 >            throw new RuntimeException("Could not initialize intrinsics",
1223 >                                       e.getCause());
1224          }
1225      }
1224
1226   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines