Do not callback one SM EVENT_ERROR twice.#1559
Conversation
988d100 to
f0c816f
Compare
After apache#947 (c1ac5f) and apache#1522 (a128d5) , the EVENT_ERROR which caused by EPOLLERR will be sent to read.vio._cont first and then write.vio._cont. The reader SM could close or shutdown(WRITE) the VC, but we do not check these operations before we callback write.vio._cont. The SM would received EVENT_ERROR twice if write.vio._cont == read.vio._cont.
|
clang format successful! https://ci.trafficserver.apache.org/job/clang-format-github/20/ |
|
RAT check successful! https://ci.trafficserver.apache.org/job/RAT-github/33/ |
|
Intel CC build successful! https://ci.trafficserver.apache.org/job/icc-github/144/ |
|
FreeBSD11 build successful! https://ci.trafficserver.apache.org/job/freebsd-github/1715/ |
|
AU check failed! https://ci.trafficserver.apache.org/job/autest-github/19/ |
|
Intel CC build successful! https://ci.trafficserver.apache.org/job/icc-github/145/ |
|
Linux build successful! https://ci.trafficserver.apache.org/job/linux-github/1610/ |
|
clang-analyzer build successful! https://ci.trafficserver.apache.org/job/clang-analyzer-github/277/ |
|
@oknet I it work well on my test env, and jtest can not re-product any more ! |
|
@oknet Yes, ignore AU tests for now. |
|
Nice! Testing this PR on docs.trafficserver now. Remember to close #1531 after we land this :). |
| return; | ||
| } | ||
| // If vc is closed or shutdown(WRITE) in last read_signal_error callback, | ||
| // or reader_cont is same as write.vio._cont. |
There was a problem hiding this comment.
Great comment, this really helps explaining the issue / solution.
…s to the VConnection" this reverts PRs apache#1559, apache#1522 and apache#947 This reverts commit c1ac5f8.
This reverts PRs apache#1559, apache#1522 and apache#947 PR apache#947 made the HTTP state machine unstable and lead to crashes in production like apache#1930 apache#1559 apache#1522 apache#1531 apache#1629 This reverts commit c1ac5f8.
After #947 (c1ac5f) and #1522 (a128d5) , the EVENT_ERROR which caused by
EPOLLERR will be sent to read.vio._cont first and then write.vio._cont.
The reader SM could close or shutdown(WRITE) the VC, but we do not check
these operations before we callback write.vio._cont. The SM would
received EVENT_ERROR twice if write.vio._cont == read.vio._cont.