diff -r 5de73d2d685e src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java --- a/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java Mon Dec 01 13:38:26 2008 -0800 +++ b/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java Tue Jan 20 12:27:07 2009 +1100 @@ -61,8 +61,7 @@ private long workItemsAdded = 0; - // Initialized to 1 to avoid divide by zero in averageTimeInQueue() - private long workItemsDequeued = 1; + private long workItemsDequeued = 0; private long totalTimeInQueue = 0; @@ -212,7 +211,10 @@ } } - return queue.poll(); + Work work = queue.poll(); + workItemsDequeued++; + totalTimeInQueue += System.currentTimeMillis() - work.getEnqueueTime(); + return work; } private synchronized boolean isQueueEmpty() { @@ -247,7 +249,10 @@ * to be processed. */ public synchronized long averageTimeInQueue() { - return (totalTimeInQueue/workItemsDequeued); + if (workItemsDequeued == 0) + return 0; + else + return (totalTimeInQueue / workItemsDequeued); } public String getName() {