It's actually enough with a simple shutdown lock because we have only one acceptor thread.
This commit is contained in:
parent
dccc9f8665
commit
8fb2f7c789
@ -75,7 +75,7 @@ class NioWorker implements Runnable {
|
|||||||
private volatile Selector selector;
|
private volatile Selector selector;
|
||||||
private final AtomicBoolean wakenUp = new AtomicBoolean();
|
private final AtomicBoolean wakenUp = new AtomicBoolean();
|
||||||
private final ReadWriteLock selectorGuard = new ReentrantReadWriteLock();
|
private final ReadWriteLock selectorGuard = new ReentrantReadWriteLock();
|
||||||
private final ReadWriteLock shutdownLock = new ReentrantReadWriteLock();
|
private final Object shutdownLock = new Object();
|
||||||
//private final FastQueue<Runnable> taskQueue = new FastQueue<Runnable>();
|
//private final FastQueue<Runnable> taskQueue = new FastQueue<Runnable>();
|
||||||
//private final ConcurrentFastQueue<Runnable> taskQueue = new ConcurrentFastQueue<Runnable>();
|
//private final ConcurrentFastQueue<Runnable> taskQueue = new ConcurrentFastQueue<Runnable>();
|
||||||
private final FastQueue<Runnable> registerTaskQueue = new FastQueue<Runnable>();
|
private final FastQueue<Runnable> registerTaskQueue = new FastQueue<Runnable>();
|
||||||
@ -117,11 +117,8 @@ class NioWorker implements Runnable {
|
|||||||
|
|
||||||
executor.execute(new ThreadRenamingRunnable(this, threadName));
|
executor.execute(new ThreadRenamingRunnable(this, threadName));
|
||||||
} else {
|
} else {
|
||||||
shutdownLock.readLock().lock();
|
synchronized (shutdownLock) {
|
||||||
try {
|
|
||||||
registerTaskQueue.offer(registerTask);
|
registerTaskQueue.offer(registerTask);
|
||||||
} finally {
|
|
||||||
shutdownLock.readLock().unlock();
|
|
||||||
}
|
}
|
||||||
if (wakenUp.compareAndSet(false, true)) {
|
if (wakenUp.compareAndSet(false, true)) {
|
||||||
selector.wakeup();
|
selector.wakeup();
|
||||||
@ -163,8 +160,7 @@ class NioWorker implements Runnable {
|
|||||||
if (shutdown ||
|
if (shutdown ||
|
||||||
executor instanceof ExecutorService && ((ExecutorService) executor).isShutdown()) {
|
executor instanceof ExecutorService && ((ExecutorService) executor).isShutdown()) {
|
||||||
|
|
||||||
shutdownLock.writeLock().lock();
|
synchronized (shutdownLock) {
|
||||||
try {
|
|
||||||
if (registerTaskQueue.isEmpty() && selector.keys().isEmpty()) {
|
if (registerTaskQueue.isEmpty() && selector.keys().isEmpty()) {
|
||||||
try {
|
try {
|
||||||
selector.close();
|
selector.close();
|
||||||
@ -179,8 +175,6 @@ class NioWorker implements Runnable {
|
|||||||
} else {
|
} else {
|
||||||
shutdown = false;
|
shutdown = false;
|
||||||
}
|
}
|
||||||
} finally {
|
|
||||||
shutdownLock.writeLock().unlock();
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Give one more second.
|
// Give one more second.
|
||||||
|
Loading…
Reference in New Issue
Block a user