Author: markt Date: Mon Jan 14 09:02:56 2013 New Revision: 1432842 URL: http://svn.apache.org/viewvc?rev=1432842&view=rev Log: Simplify locking code. Mark remaining issues as false positives
Modified: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/FairBlockingQueue.java tomcat/trunk/res/findbugs/filter-false-positives.xml Modified: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/FairBlockingQueue.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/FairBlockingQueue.java?rev=1432842&r1=1432841&r2=1432842&view=diff ============================================================================== --- tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/FairBlockingQueue.java (original) +++ tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/FairBlockingQueue.java Mon Jan 14 09:02:56 2013 @@ -134,10 +134,9 @@ public class FairBlockingQueue<E> implem public E poll(long timeout, TimeUnit unit) throws InterruptedException { E result = null; final ReentrantLock lock = this.lock; - boolean error = true; - //acquire the global lock until we know what to do - lock.lock(); try { + //acquire the global lock until we know what to do + lock.lock(); //check to see if we have objects result = items.poll(); if (result==null && timeout>0) { @@ -160,9 +159,8 @@ public class FairBlockingQueue<E> implem //we have an object, release lock.unlock(); } - error = false; } finally { - if (error && lock.isHeldByCurrentThread()) { + if (lock.isHeldByCurrentThread()) { lock.unlock(); } } @@ -176,29 +174,23 @@ public class FairBlockingQueue<E> implem public Future<E> pollAsync() { Future<E> result = null; final ReentrantLock lock = this.lock; - boolean error = true; - //grab the global lock - lock.lock(); try { + //grab the global lock + lock.lock(); //check to see if we have objects in the queue E item = items.poll(); if (item==null) { //queue is empty, add ourselves as waiters ExchangeCountDownLatch<E> c = new ExchangeCountDownLatch<>(1); waiters.addLast(c); - lock.unlock(); //return a future that will wait for the object result = new ItemFuture<>(c); } else { - lock.unlock(); //return a future with the item result = new ItemFuture<>(item); } - error = false; } finally { - if (error && lock.isHeldByCurrentThread()) { - lock.unlock(); - } + lock.unlock(); } return result; } Modified: tomcat/trunk/res/findbugs/filter-false-positives.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/res/findbugs/filter-false-positives.xml?rev=1432842&r1=1432841&r2=1432842&view=diff ============================================================================== --- tomcat/trunk/res/findbugs/filter-false-positives.xml (original) +++ tomcat/trunk/res/findbugs/filter-false-positives.xml Mon Jan 14 09:02:56 2013 @@ -230,6 +230,12 @@ <Bug code="Nm" /> </Match> <Match> + <!-- Lock is released --> + <Class name="org.apache.tomcat.jdbc.pool.FairBlockingQueue" /> + <Method name="poll" /> + <Bug code="UL" /> + </Match> + <Match> <!-- Use of == is deliberate --> <Class name="org.apache.tomcat.jdbc.pool.JdbcInterceptor" /> <Method name="compare" /> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org