On Sat, Feb 17, 2001 at 12:00:30AM -0500, Gianni Johansson wrote:
> On Monday 12 February 2001 17:12, you wrote:
> 
> > > > Why not just use a counter that's incremented when jobs are dequeued and
> > > run in ThreadPool.run() and decremented in ThreadPool.reclaim() ?
> >
> > I take it back.  Since reclaim is in the finally block of EThread, this
> > will work.  I've worked in the necessary changes.
> >
> > Bad, could you backport them out of experimental.
> >
> > GJ:  Try it this time.  It doesnt seem to report negative values.
> 
> I retested.  There's still at least one bad bug.
> 
> It causes the ThreadPool.run() to intermently stop running jobs even though
> less than maxThreads threads are running.

I'm starting to think that recoding the damned pool is a better overall
solution.  >:|

> 
> See comments in source:
> 
>  /**
>      * Activates this ThreadPool. This ThreadPool will grab a queued job,
>      * associate it with an EThread, and tell the EThread to begin. It does
>      * this over and over again, until it is {@link halt halt}ed.
>      */
> 
>     public void run() {
>       while (run) {
>           try {
> 
>               // Block until both an EThread is available and a job is
>               // queued.
> 
> 
>               EThread host=null;
>               if (maxThreads > 0 || !threads.isEmpty()) 
>                   //                     ^--- LOOK HERE
>                             // This condition can evautate to true even when
>                             //  threads.size() == 0 and 
>                             //  runningThreads() < maxThreads.
>                             // In this case pop blocks an EThread is push()'d
>                             // into threads.  That could take a long time....
Its even possible that it wouldn't ever happen.  This should be

if (!threads.isEmpty() && runningThreads() < maxThreads() || 
    maxThreads==0)
>     } 
> 
>     Also, the current implementation of reclaim will release all of
>     the preallocated Ethreads until only maxPoolThreads remain when the
>     ThreadPool quiesces, so why not just preallocate maxPoolThreads in
>      the first place, instead of maxThreads?
Absolutely.  That behaviour (reclaim releasing until we're down to
maxPoolThreads) was added, and I obviously forgot to reconcile it with the
initially filling.  

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 232 bytes
Desc: not available
URL: 
<https://emu.freenetproject.org/pipermail/devl/attachments/20010218/2e2aa299/attachment.pgp>

Reply via email to