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.50 by dl, Sat Oct 24 12:29:57 2009 UTC vs.
Revision 1.51 by dl, Sat Oct 24 14:33:29 2009 UTC

# Line 502 | Line 502 | public class LinkedTransferQueue<E> exte
502                      if (isData == haveData)   // can't match
503                          break;
504                      if (p.casItem(item, e)) { // match
505 <                        Thread w = p.waiter;
505 >                        LockSupport.unpark(p.waiter);
506                          while (p != h) {      // update head
507                              Node n = p.next;  // by 2 unless singleton
508                              if (n != null)
# Line 515 | Line 515 | public class LinkedTransferQueue<E> exte
515                                  (p = h.next) == null || !p.isMatched())
516                                  break;        // unless slack < 2
517                          }
518                        LockSupport.unpark(w);
518                          return item;
519                      }
520                  }
# Line 613 | Line 612 | public class LinkedTransferQueue<E> exte
612                      Thread.yield();           // occasionally yield
613              }
614              else if (s.waiter == null) {
615 <                s.waiter = w;                 // request unpark
615 >                s.waiter = w;                 // request unpark then recheck
616              }
617              else if (how == TIMEOUT) {
618                  long now = System.nanoTime();
# Line 623 | Line 622 | public class LinkedTransferQueue<E> exte
622              }
623              else {
624                  LockSupport.park(this);
625 +                s.waiter = null;
626                  spins = -1;                   // spin if front upon wakeup
627              }
628          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines