This is an automated email from the ASF dual-hosted git repository.
elecharny pushed a commit to branch 2.0.X
in repository https://gitbox.apache.org/repos/asf/mina.git
The following commit(s) were added to refs/heads/2.0.X by this push:
new 7fd6905 Backorted JonV patch
new 6ef9ea2 Merge branch '2.0.X' of
http://gitbox.apache.org/repos/asf/mina into 2.0.X
7fd6905 is described below
commit 7fd6905a9235d7ce8cd587ae0bd845b36b29c5bf
Author: emmanuel lecharny <[email protected]>
AuthorDate: Tue Feb 8 02:29:13 2022 +0100
Backorted JonV patch
---
.../org/apache/mina/core/polling/AbstractPollingIoProcessor.java | 6 ++++--
.../src/main/java/org/apache/mina/filter/ssl/SslHandler.java | 9 ++++++---
2 files changed, 10 insertions(+), 5 deletions(-)
diff --git
a/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
b/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
index 0d2ad17..6d7f682 100644
---
a/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
+++
b/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
@@ -910,8 +910,10 @@ public abstract class AbstractPollingIoProcessor<S extends
AbstractIoSession> im
}
// Reset the Schedule for flush flag for this session,
- // as we are flushing it now
- session.unscheduledForFlush();
+ // as we are flushing it now. This allows another thread
+ // to enqueue data to be written without corrupting the
+ // selector interest state.
+ session.unscheduledForFlush();
SessionState state = getState(session);
diff --git a/mina-core/src/main/java/org/apache/mina/filter/ssl/SslHandler.java
b/mina-core/src/main/java/org/apache/mina/filter/ssl/SslHandler.java
index 1eaac9e..82ba849 100644
--- a/mina-core/src/main/java/org/apache/mina/filter/ssl/SslHandler.java
+++ b/mina-core/src/main/java/org/apache/mina/filter/ssl/SslHandler.java
@@ -41,6 +41,7 @@ import org.apache.mina.core.session.IoEventType;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.core.write.DefaultWriteRequest;
import org.apache.mina.core.write.WriteRequest;
+import org.apache.mina.core.write.WriteRequestQueue;
import org.apache.mina.filter.ssl.SslFilter.EncryptedWriteRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -525,9 +526,11 @@ class SslHandler {
}
// Empty the session queue
- while (!session.getWriteRequestQueue().isEmpty(session)) {
- WriteRequest writeRequest =
session.getWriteRequestQueue().poll( session );
- WriteFuture writeFuture = writeRequest.getFuture();
+ WriteRequestQueue queue = session.getWriteRequestQueue();
+ WriteRequest request = null;
+
+ while ((request = queue.poll(session)) != null) {
+ WriteFuture writeFuture = request.getFuture();
writeFuture.setException(exception);
writeFuture.notifyAll();
}