/** * Returns an NGSession from the pool, or creates one if necessary * @return an NGSession ready to work */ NGSession take() { NGSession result; synchronized(lock) { if (poolEntries == 0) { result = new NGSession(this, server); result.start(); } else { --poolEntries; result = pool[poolEntries]; } } return (result); }