public synchronized ResourcePool createPool(ResourcePool.Manager mgr)
     throws ResourcePoolException {
   if (liveChildren == null) createThreadResources();
   // System.err.println("Created liveChildren: " + liveChildren);
   ResourcePool child =
       new BasicResourcePool(
           mgr,
           start,
           min,
           max,
           inc,
           retry_attempts,
           retry_delay,
           idle_resource_test_period,
           max_age,
           max_idle_time,
           excess_max_idle_time,
           destroy_overdue_resc_time,
           expiration_enforcement_delay,
           break_on_acquisition_failure,
           debug_store_checkout_stacktrace,
           taskRunner,
           asyncEventQueue,
           timer,
           this);
   liveChildren.add(child);
   return child;
 }
  synchronized void markBroken(BasicResourcePool pool) {
    // System.err.println("markBroken -- liveChildren: " + liveChildren);
    if (liveChildren != null) // keep this method idempotent!
    {
      liveChildren.remove(pool);
      if (liveChildren.isEmpty()) destroyThreadResources();
    }
    //  	rqUsers.remove( pool );
    //  	if (rqUsers.size() == 0)
    //  	    {
    //  		rqUsers = null;
    //  		rq.close();
    //  		rq = null;
    //  	    }

    //  	timerUsers.remove( pool );
    //  	if (timerUsers.size() == 0)
    //  	    {
    //  		timerUsers = null;
    //  		timer.cancel();
    //  		timer = null;
    //  	    }
  }