Skip to content

Commit 50be71e

Browse files
author
Emmanuel Lécharny
committed
Protected the selector againts concurrent access in a few more places
1 parent 9cf592c commit 50be71e

1 file changed

Lines changed: 24 additions & 3 deletions

File tree

mina-core/src/main/java/org/apache/mina/transport/socket/nio/NioProcessor.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,14 @@ protected Iterator<NioSession> allSessions() {
163163
@Override
164164
protected int allSessionsCount()
165165
{
166-
return selector.keys().size();
166+
selectorLock.readLock().lock();
167+
168+
try {
169+
return selector.keys().size();
170+
} finally {
171+
selectorLock.readLock().unlock();
172+
}
173+
167174
}
168175

169176
@SuppressWarnings("synthetic-access")
@@ -345,7 +352,14 @@ protected void setInterestedInRead(NioSession session, boolean isInterested) thr
345352
}
346353

347354
if (oldInterestOps != newInterestOps) {
348-
key.interestOps(newInterestOps);
355+
// Protect the selector against concurrent accesses
356+
selectorLock.readLock().lock();
357+
358+
try {
359+
key.interestOps(newInterestOps);
360+
} finally {
361+
selectorLock.readLock().unlock();
362+
}
349363
}
350364
}
351365

@@ -368,7 +382,14 @@ protected void setInterestedInWrite(NioSession session, boolean isInterested) th
368382
newInterestOps &= ~SelectionKey.OP_WRITE;
369383
}
370384

371-
key.interestOps(newInterestOps);
385+
// Protect the selector against concurrent accesses
386+
selectorLock.readLock().lock();
387+
388+
try {
389+
key.interestOps(newInterestOps);
390+
} finally {
391+
selectorLock.readLock().unlock();
392+
}
372393
}
373394

374395
@Override

0 commit comments

Comments
 (0)