ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/concurrent/DelayQueue.java
(Generate patch)

Comparing jsr166/src/main/java/util/concurrent/DelayQueue.java (file contents):
Revision 1.48 by jsr166, Tue Oct 9 20:43:49 2007 UTC vs.
Revision 1.49 by jsr166, Sun May 18 23:47:56 2008 UTC

# Line 107 | Line 107 | public class DelayQueue<E extends Delaye
107          try {
108              q.offer(e);
109              if (q.peek() == e) {
110 <                leader = null;
110 >                leader = null;
111                  available.signal();
112 <            }
112 >            }
113              return true;
114          } finally {
115              lock.unlock();
# Line 177 | Line 177 | public class DelayQueue<E extends Delaye
177                  E first = q.peek();
178                  if (first == null)
179                      available.await();
180 <                else {
180 >                else {
181                      long delay = first.getDelay(TimeUnit.NANOSECONDS);
182 <                    if (delay <= 0)
183 <                        return q.poll();
184 <                    else if (leader != null)
185 <                        available.await();
186 <                    else {
187 <                        Thread thisThread = Thread.currentThread();
188 <                        leader = thisThread;
189 <                        try {
190 <                            available.awaitNanos(delay);
191 <                        } finally {
192 <                            if (leader == thisThread)
193 <                                leader = null;
194 <                        }
182 >                    if (delay <= 0)
183 >                        return q.poll();
184 >                    else if (leader != null)
185 >                        available.await();
186 >                    else {
187 >                        Thread thisThread = Thread.currentThread();
188 >                        leader = thisThread;
189 >                        try {
190 >                            available.awaitNanos(delay);
191 >                        } finally {
192 >                            if (leader == thisThread)
193 >                                leader = null;
194 >                        }
195                      }
196                  }
197              }
198          } finally {
199 <            if (leader == null && q.peek() != null)
200 <                available.signal();
199 >            if (leader == null && q.peek() != null)
200 >                available.signal();
201              lock.unlock();
202          }
203      }
# Line 226 | Line 226 | public class DelayQueue<E extends Delaye
226                          nanos = available.awaitNanos(nanos);
227                  } else {
228                      long delay = first.getDelay(TimeUnit.NANOSECONDS);
229 <                    if (delay <= 0)
230 <                        return q.poll();
231 <                    if (nanos <= 0)
232 <                        return null;
233 <                    if (nanos < delay || leader != null)
234 <                        nanos = available.awaitNanos(nanos);
235 <                    else {
236 <                        Thread thisThread = Thread.currentThread();
237 <                        leader = thisThread;
238 <                        try {
239 <                            long timeLeft = available.awaitNanos(delay);
240 <                            nanos -= delay - timeLeft;
241 <                        } finally {
242 <                            if (leader == thisThread)
243 <                                leader = null;
244 <                        }
245 <                    }
229 >                    if (delay <= 0)
230 >                        return q.poll();
231 >                    if (nanos <= 0)
232 >                        return null;
233 >                    if (nanos < delay || leader != null)
234 >                        nanos = available.awaitNanos(nanos);
235 >                    else {
236 >                        Thread thisThread = Thread.currentThread();
237 >                        leader = thisThread;
238 >                        try {
239 >                            long timeLeft = available.awaitNanos(delay);
240 >                            nanos -= delay - timeLeft;
241 >                        } finally {
242 >                            if (leader == thisThread)
243 >                                leader = null;
244 >                        }
245 >                    }
246                  }
247              }
248          } finally {
249 <            if (leader == null && q.peek() != null)
250 <                available.signal();
249 >            if (leader == null && q.peek() != null)
250 >                available.signal();
251              lock.unlock();
252          }
253      }
# Line 470 | Line 470 | public class DelayQueue<E extends Delaye
470       */
471      private class Itr implements Iterator<E> {
472          final Object[] array; // Array of all elements
473 <        int cursor;           // index of next element to return;
474 <        int lastRet;          // index of last element, or -1 if no such
473 >        int cursor;           // index of next element to return;
474 >        int lastRet;          // index of last element, or -1 if no such
475  
476          Itr(Object[] array) {
477              lastRet = -1;
# Line 482 | Line 482 | public class DelayQueue<E extends Delaye
482              return cursor < array.length;
483          }
484  
485 <        @SuppressWarnings("unchecked")
485 >        @SuppressWarnings("unchecked")
486          public E next() {
487              if (cursor >= array.length)
488                  throw new NoSuchElementException();
# Line 492 | Line 492 | public class DelayQueue<E extends Delaye
492  
493          public void remove() {
494              if (lastRet < 0)
495 <                throw new IllegalStateException();
495 >                throw new IllegalStateException();
496              Object x = array[lastRet];
497              lastRet = -1;
498              // Traverse underlying queue to find == element,

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines