disposed = doDispose(item); returned = doReturn(item); disposed = doDispose(item); doDestroy(item, BAD, () -> doAttemptShutdown()); doAttemptShutdown();
@Override public void start() { LOG.info("{}: start requested", _name); synchronized (_lock) { if (_state != State.NOT_YET_STARTED) { throw new IllegalStateException(_name + " is " + _state); } _state = State.RUNNING; if (_timeoutMills > 0) { long freq = Math.min(_timeoutMills / 10, 1000); _reaperTaskFuture = _scheduler.scheduleAtFixedRate(() -> reap(), freq, freq, TimeUnit.MILLISECONDS); } if (_createImmediately) { _isCreateInProgress = true; doCreate(); } } }
@Override public void dispose(T item) { LOG.error("{}: disposing an item {}", _name, item); boolean disposed; synchronized (_lock) { disposed = doDispose(item); } if (disposed) { doDestroy(item, BAD, () -> doAttemptShutdown()); } }
public final T get() { return _item; }
doDestroy(item, NOT_BAD, () -> doAttemptShutdown());
@Override public void shutdown(Callback<None> callback) { ArgumentUtil.notNull(callback, "callback"); LOG.info("{}: shutdown requested", _name); final State state; synchronized (_lock) { state = _state; if (state == State.RUNNING) { _state = State.SHUTTING_DOWN; _shutdownCallback = callback; } } if (state != State.RUNNING) { LOG.error("{}: shutdown requested while pool is not running", _name); callback.onError(new IllegalStateException(_name + " is " + _state)); return; } doAttemptShutdown(); }
@Override public AsyncPool<Channel> getPool(SocketAddress address) { return new AsyncSharedPoolImpl<>( address.toString(), new ChannelPoolLifecycle( address, _bootstrap, _allChannels, _tcpNoDelay), _scheduler, new NoopRateLimiter(), _idleTimeout, _createChannelImmediately, _maxPoolWaiterSize, SystemClock.instance(), NoopLongTracker.instance()); } }