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

Comparing jsr166/src/jsr166y/LinkedTransferQueue.java (file contents):
Revision 1.88 by jsr166, Sat Jun 4 17:57:59 2011 UTC vs.
Revision 1.94 by jsr166, Sat Oct 3 18:17:51 2015 UTC

# Line 76 | Line 76 | public class LinkedTransferQueue<E> exte
76       *
77       * A FIFO dual queue may be implemented using a variation of the
78       * Michael & Scott (M&S) lock-free queue algorithm
79 <     * (http://www.cs.rochester.edu/u/scott/papers/1996_PODC_queues.pdf).
79 >     * (http://www.cs.rochester.edu/~scott/papers/1996_PODC_queues.pdf).
80       * It maintains two pointer fields, "head", pointing to a
81       * (matched) node that in turn points to the first actual
82       * (unmatched) queue node (or null if empty); and "tail" that
# Line 598 | Line 598 | public class LinkedTransferQueue<E> exte
598                                  break;        // unless slack < 2
599                          }
600                          LockSupport.unpark(p.waiter);
601 <                        return this.<E>cast(item);
601 >                        return LinkedTransferQueue.<E>cast(item);
602                      }
603                  }
604                  Node n = p.next;
# Line 676 | Line 676 | public class LinkedTransferQueue<E> exte
676              if (item != e) {                  // matched
677                  // assert item != s;
678                  s.forgetContents();           // avoid garbage
679 <                return this.<E>cast(item);
679 >                return LinkedTransferQueue.<E>cast(item);
680              }
681 <            if ((w.isInterrupted() || (timed && nanos <= 0)) &&
681 >            if ((w.isInterrupted() || (timed && nanos <= 0L)) &&
682                      s.casItem(e, s)) {        // cancel
683                  unsplice(pred, s);
684                  return e;
# Line 757 | Line 757 | public class LinkedTransferQueue<E> exte
757              Object item = p.item;
758              if (p.isData) {
759                  if (item != null && item != p)
760 <                    return this.<E>cast(item);
760 >                    return LinkedTransferQueue.<E>cast(item);
761              }
762              else if (item == null)
763                  return null;
# Line 1134 | Line 1134 | public class LinkedTransferQueue<E> exte
1134          if (c == this)
1135              throw new IllegalArgumentException();
1136          int n = 0;
1137 <        E e;
1138 <        while ( (e = poll()) != null) {
1137 >        for (E e; (e = poll()) != null;) {
1138              c.add(e);
1139              ++n;
1140          }
# Line 1152 | Line 1151 | public class LinkedTransferQueue<E> exte
1151          if (c == this)
1152              throw new IllegalArgumentException();
1153          int n = 0;
1154 <        E e;
1156 <        while (n < maxElements && (e = poll()) != null) {
1154 >        for (E e; n < maxElements && (e = poll()) != null;) {
1155              c.add(e);
1156              ++n;
1157          }
# Line 1293 | Line 1291 | public class LinkedTransferQueue<E> exte
1291          throws java.io.IOException, ClassNotFoundException {
1292          s.defaultReadObject();
1293          for (;;) {
1294 <            @SuppressWarnings("unchecked") E item = (E) s.readObject();
1294 >            @SuppressWarnings("unchecked")
1295 >            E item = (E) s.readObject();
1296              if (item == null)
1297                  break;
1298              else
# Line 1332 | Line 1331 | public class LinkedTransferQueue<E> exte
1331      static sun.misc.Unsafe getUnsafe() {
1332          try {
1333              return sun.misc.Unsafe.getUnsafe();
1334 <        } catch (SecurityException se) {
1335 <            try {
1336 <                return java.security.AccessController.doPrivileged
1337 <                    (new java.security
1338 <                     .PrivilegedExceptionAction<sun.misc.Unsafe>() {
1339 <                        public sun.misc.Unsafe run() throws Exception {
1340 <                            java.lang.reflect.Field f = sun.misc
1341 <                                .Unsafe.class.getDeclaredField("theUnsafe");
1342 <                            f.setAccessible(true);
1343 <                            return (sun.misc.Unsafe) f.get(null);
1344 <                        }});
1345 <            } catch (java.security.PrivilegedActionException e) {
1346 <                throw new RuntimeException("Could not initialize intrinsics",
1347 <                                           e.getCause());
1348 <            }
1334 >        } catch (SecurityException tryReflectionInstead) {}
1335 >        try {
1336 >            return java.security.AccessController.doPrivileged
1337 >            (new java.security.PrivilegedExceptionAction<sun.misc.Unsafe>() {
1338 >                public sun.misc.Unsafe run() throws Exception {
1339 >                    Class<sun.misc.Unsafe> k = sun.misc.Unsafe.class;
1340 >                    for (java.lang.reflect.Field f : k.getDeclaredFields()) {
1341 >                        f.setAccessible(true);
1342 >                        Object x = f.get(null);
1343 >                        if (k.isInstance(x))
1344 >                            return k.cast(x);
1345 >                    }
1346 >                    throw new NoSuchFieldError("the Unsafe");
1347 >                }});
1348 >        } catch (java.security.PrivilegedActionException e) {
1349 >            throw new RuntimeException("Could not initialize intrinsics",
1350 >                                       e.getCause());
1351          }
1352      }
1352
1353   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines