On 17/03/2010, Mark Thomas <ma...@apache.org> wrote:
> On 17/03/2010 22:04, sebb wrote:
>
> > On 17/03/2010, Mark Thomas<ma...@apache.org>  wrote:
> >
> > > One of the POOL test cases is failing -
> > > TestSoftRefOutOfMemory.testOutOfMemoryError()
> > >
> > >  I can't see any recent code changes that may have caused this and I
> think
> > > the recent removal of the testAll code is what has exposed this. On the
> > > basis that always catching Throwable is bad, but there are many cases
> POOL
> > > does need to catch, what do folks here think to the liberal application
> of
> > > the following anywhere POOL catches Throwable?
> > >
> >
> > ThreadDeath should never be ignored either.
> >
>  Yep.
>
>
> > Is it necessary to swallow all Throwables apart from VME?
> >
>  That depends on your definition of necessary. I'd like to keep the list of
> exceptions as small as possible.
>
>  On reflection, I think I'll put this in a utility method so the list of
> exceptions only has to be maintained in a single place. That will help keep
> the code clean even if we end up with a long list of Throwables we don't
> want to swallow.

Sounds good.

Seems to me it would be useful to be able to record or log the
swallowed Throwables.

If the Throwable is caused by a user error, then swallowing it means
that the error is likely to be much harder to diagnose and fix.

>
> > Maybe should rethrow some other classes of Throwable as well.
> >
> > Is it known which Throwables Pool does need to catch?
> >
>  No fixed list. I'd say as many as possible.
>
>  Mark
>
>
>
>
> >
> >
> > >  Index:
> > >
> src/java/org/apache/commons/pool/impl/SoftReferenceObjectPool.java
> > >
> ===================================================================
> > >  ---
> > >
> src/java/org/apache/commons/pool/impl/SoftReferenceObjectPool.java
> > > (revision 924253)
> > >  +++
> > >
> src/java/org/apache/commons/pool/impl/SoftReferenceObjectPool.java
> > > (working copy)
> > >  @@ -106,10 +106,18 @@
> > >                          throw new Exception("ValidateObject failed");
> > >                      }
> > >                  } catch (Throwable t) {
> > >  +                    if (t instanceof VirtualMachineError) {
> > >  +                        // Always throw VM errors immediately
> > >  +                        throw (VirtualMachineError) t;
> > >  +                    }
> > >                      try {
> > >                          _factory.destroyObject(obj);
> > >                      } catch (Throwable t2) {
> > >  -                        // swallowed
> > >  +                        if (t2 instanceof VirtualMachineError) {
> > >  +                            // Always throw VM errors immediately
> > >  +                            throw (VirtualMachineError) t2;
> > >  +                        }
> > >  +                        // Otherwise swallowed
> > >                      } finally {
> > >                          obj = null;
> > >                      }
> > >
> > >  This fixes the current test failures but really should be applied to
> all
> > > places where Throwable is caught.
> > >
> > >  Mark
> > >
> > >
> > >
> > >
> ---------------------------------------------------------------------
> > >  To unsubscribe, e-mail:
> dev-unsubscr...@commons.apache.org
> > >  For additional commands, e-mail: dev-h...@commons.apache.org
> > >
> > >
> > >
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> dev-unsubscr...@commons.apache.org
> > For additional commands, e-mail: dev-h...@commons.apache.org
> >
> >
>
>
>
>
> ---------------------------------------------------------------------
>  To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>  For additional commands, e-mail: dev-h...@commons.apache.org
>
>

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

Reply via email to