I straightened out a number of startup deadlock issues for 5.2.  They can
be very challenging to root out.

On Thu, Jun 14, 2012 at 9:47 PM, Jens Breitenstein TOC <
jens.breitenst...@t-o-c.biz> wrote:

> Hi Howard,
>
> In the past we had severe problems with T5 when a tomcat was started under
> heavy load. It deadlocked reproduceble in the classloader / bytecode
> instrumentation area. Thus we workaround this issue but clicking the index
> page manually ones before adding the tomcat to the loadbalancer (T5.0.x).
> Yesterday we faced a similar issue with the latest T5.3rc, but this is
> under investigation right , details will follow. I just want you to make
> aware that it is not uncommon to start T5 under heavy load as heavy load is
> the reason for adding new servers to the cluster ;-)
> Personally I think startup should be bulletproof.
>

I agree, but it is in the nature of race conditions to be difficult to
prove correctness in this area.


>
> Jens
>
> Von meinem iPad gesendet
>
> Am 14.06.2012 um 19:28 schrieb Howard Lewis Ship <hls...@gmail.com>:
>
> > I'm already somewhat unhappy at the complexity of the code; I'd prefer
> not
> > to make it any more complicated.  I think race conditions on the write
> lock
> > are going to be pretty rare and probably only occur on a somewhat
> saturated
> > server at initial startup.  I think twisting the code ever further.
> >
> > In addition, in a ReentrantReadWriteLock, the write lock appears to
> return
> > false if any thread has the read lock, which could result in
> > the initialization code never being run.
> >
> > On Thu, Jun 14, 2012 at 2:36 AM, Denis Stepanov <
> denis.stepa...@gmail.com>wrote:
> >
> >> Concurrency topic:
> >>
> >> Would it be possible to change the lazy init to check if write lock is
> >> already locked? It will eliminate the posibility of locking the write
> lock
> >> by more then one thread.
> >>
> >> try {
> >>
> >> readLock.lock();
> >>
> >> if(is need to init)
> >> {
> >>      boolean hasWriteLock = false;
> >>      try {
> >>              readLock.unlock();
> >>              hasWriteLock  = writeLock.tryLock(); // Could be locked
> >> only once
> >>               if(hasWriteLock)
> >>                      doInit();
> >>      } finally
> >>      {
> >>          if(hasWriteLock)
> >>               writeLock.unlock();
> >>
> >>          readLock.lock(); // If the write lock is locked read threads
> >> will wait
> >>      }
> >> }
> >> return ...
> >>
> >> }  finally
> >> {
> >>      readLock.unlock();
> >> }
> >>
> >>
> >
> >
> > --
> > Howard M. Lewis Ship
> >
> > Creator of Apache Tapestry
> >
> > The source for Tapestry training, mentoring and support. Contact me to
> > learn how I can get you up and productive in Tapestry fast!
> >
> > (971) 678-5210
> > http://howardlewisship.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>


-- 
Howard M. Lewis Ship

Creator of Apache Tapestry

The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!

(971) 678-5210
http://howardlewisship.com

Reply via email to