Skip to content

Commit d13e4de

Browse files
UNDERTOW-1377 SslConduit race can result in suspended reads
1 parent 7235c58 commit d13e4de

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

core/src/main/java/io/undertow/protocols/ssl/SslConduit.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1135,7 +1135,12 @@ public void readReady() {
11351135
} finally {
11361136
invokingReadListenerHandshake = false;
11371137
}
1138+
1139+
if(!anyAreSet(state, FLAG_READS_RESUMED) && !allAreSet(state, FLAG_WRITE_REQUIRES_READ | FLAG_WRITES_RESUMED)) {
1140+
delegate.getSourceChannel().suspendReads();
1141+
}
11381142
}
1143+
11391144
boolean noProgress = false;
11401145
int initialDataToUnwrap = -1;
11411146
int initialUnwrapped = -1;
@@ -1162,9 +1167,7 @@ public void readReady() {
11621167
delegateHandler.readReady();
11631168
}
11641169
}
1165-
if(!anyAreSet(state, FLAG_READS_RESUMED) && !allAreSet(state, FLAG_WRITE_REQUIRES_READ | FLAG_WRITES_RESUMED)) {
1166-
delegate.getSourceChannel().suspendReads();
1167-
} else if(anyAreSet(state, FLAG_READS_RESUMED) && (unwrappedData != null || anyAreSet(state, FLAG_DATA_TO_UNWRAP))) {
1170+
if(anyAreSet(state, FLAG_READS_RESUMED) && (unwrappedData != null || anyAreSet(state, FLAG_DATA_TO_UNWRAP))) {
11681171
if(anyAreSet(state, FLAG_READ_CLOSED)) {
11691172
if(unwrappedData != null) {
11701173
unwrappedData.close();

core/src/test/java/io/undertow/server/ssl/SimpleSSLTestCase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ public void run() {
178178
}
179179
}
180180
};
181-
for (int i = 0; i < concurrency * 3000; i++) {
181+
for (int i = 0; i < concurrency * 300; i++) {
182182
executorService.submit(task);
183183
}
184184
executorService.shutdown();

0 commit comments

Comments
 (0)