Line 150 of org.apache.tomcat.jdbc.pool.FairBlockingQueue can throw
InterruptedException, which should be handled by:

catch (InterruptedException e) {
   lock.lock();
   waiters.remove(c); // prevent future threads from offering to this
thread, since we are about to die
   lock.unlock();
   if (c.getCount() == 0) { // was given a connection between
                                    // when the exception was thrown we acquired
                                    // the lock.  This seems unlikely, so we are
                                    // happy to have let go of the
lock and re-acquire
                                    // if necessary
       lock.lock();
       items.addFirst(c.getItem()); // return to the head of the
queue, as per policy in offer()
       lock.unlock();
   }
}

You're welcome.

cf 
http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/FairBlockingQueue.java?revision=1432842&view=markup

public E poll(long timeout, TimeUnit unit) throws InterruptedException {
135        E result = null;
136        final ReentrantLock lock = this.lock;
137        try {
138            //acquire the global lock until we know what to do
139            lock.lock();
140            //check to see if we have objects
141            result = items.poll();
142            if (result==null && timeout>0) {
143                //the queue is empty we will wait for an object
144                ExchangeCountDownLatch<E> c = new
ExchangeCountDownLatch<>(1);
145                //add to the bottom of the wait list
146                waiters.addLast(c);
147                //unlock the global lock
148                lock.unlock();
149                //wait for the specified timeout
150                if (!c.await(timeout, unit)) {
151                    //if we timed out, remove ourselves from the waitlist
152                    lock.lock();
153                    waiters.remove(c);
154                    lock.unlock();
155                }
156                //return the item we received, can be null if we timed out
157                result = c.getItem();
158            } else {
159                //we have an object, release
160                lock.unlock();
161            }
162        } finally {
163            if (lock.isHeldByCurrentThread()) {
164                lock.unlock();
165            }
166        }
167        return result;
168    }
David Bullock
Machaira Enterprises Pty Ltd

PO Box 31
Canowindra NSW 2804

02 6344 1100
http://machaira.com.au/


On 21 November 2013 04:58, Christopher Schultz
<ch...@christopherschultz.net> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA256
>
> Marko,
>
> On 11/20/13, 12:07 PM, marko lugarič wrote:
>> I have repeated the test with logAbandoned set to "true" and left
>> it half hour after pool is empty. There are a lot of exceptions
>> (Pool empty. Unable to fetch a connection in 15 seconds and Pool
>> wait interrupted) but i don't know what exactly to search (search
>> with Abandoned did not produce anything). I have already tried
>> using StatementFinalizer interceptor but it did not do anything to
>> prevent pool from being empty.
>
> Can you work-up a simple testcase webapp and load test to reproduce
> this problem? If so, please file a bug against tomcat-pool in Bugzilla
> and attach the simple webapp and test harness.
>
> - -chris
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.15 (Darwin)
> Comment: GPGTools - http://gpgtools.org
> Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
>
> iQIcBAEBCAAGBQJSjPhBAAoJEBzwKT+lPKRYQxIQAMHi+9z9jCbzulHiXns/Mt3p
> J6w6K6nFCbDOgj7noYfwGf2eBINPQ77ywhF56pzBgn6v2wXWG21NRXTLfHxJJM/s
> i1Ol9qp9mEUz3gmcumHbXU+RBBn1CbSh6D8cdVZDsX6tGF4BuzNtseZ0PRq7ZI5A
> fi6dyPA5sZf1skfHIOBhmWT7VB7UGud03YmxnKhe3e7N2ZtDN2AJYNhU0haSHd1m
> 1DGlCYxmMlK5mbqRA3RGWFTrnDmEvhBnSTLJaLywAojN8XHnNAH4fx4+MCT5GXrV
> h1EL1PhvFnpbQ5haTOHNIwCNtW3OPwdLsXXVimOVF6UvEZepF3pDJUL0KVV+Kfem
> p+r5BjkcjZ7LYirDBPFCsIovSwFcLrLScPUKbDHhF0Re5E7K7EtXuVuGGCJqWRsf
> 8w8Z2pcyBIhX85+D+kBZ2m6MFODXnEqTQeGbFhzffuPXV/DuvipARpFg9s8uo1ws
> 85NEtFzHjNblgxVxFaEgbbWulKT1ZNZerAMRnGDh9W2ngMjwYuQfevbJghUkM5b4
> nMc/aNU2mg10lneRwTUIJ0f/aGfiCQegjSSEYGIDi1LcDHDkI4GPmMz3gGIfItBs
> yBEWXKn8aqVqVEVKjFzq5tD0kw9zyCEErYJH6N7o0HYmHHYfPxgz5Cr8gnnayUac
> Ru2Z7Ur1lnZZnC72oUwz
> =bJFf
> -----END PGP SIGNATURE-----
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to