mirror of
https://github.com/libevent/libevent.git
synced 2025-01-31 09:12:55 +08:00
Merge remote-tracking branch 'origin/patches-2.0'
This commit is contained in:
commit
c00416f745
@ -784,6 +784,23 @@ consider_reading(struct bufferevent_openssl *bev_ssl)
|
|||||||
* already been done, since OpenSSL went and read a
|
* already been done, since OpenSSL went and read a
|
||||||
* whole SSL record anyway. */
|
* whole SSL record anyway. */
|
||||||
n_to_read = SSL_pending(bev_ssl->ssl);
|
n_to_read = SSL_pending(bev_ssl->ssl);
|
||||||
|
|
||||||
|
/* XXX This if statement is actually a bad bug, added to avoid
|
||||||
|
* XXX a worse bug.
|
||||||
|
*
|
||||||
|
* The bad bug: It can potentially cause resource unfairness
|
||||||
|
* by reading too much data from the underlying bufferevent;
|
||||||
|
* it can potentially cause read looping if the underlying
|
||||||
|
* bufferevent is a bufferevent_pair and deferred callbacks
|
||||||
|
* aren't used.
|
||||||
|
*
|
||||||
|
* The worse bug: If we didn't do this, then we would
|
||||||
|
* potentially not read any more from bev_ssl->underlying
|
||||||
|
* until more data arrived there, which could lead to us
|
||||||
|
* waiting forever.
|
||||||
|
*/
|
||||||
|
if (!n_to_read && bev_ssl->underlying)
|
||||||
|
n_to_read = bytes_to_read(bev_ssl);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!bev_ssl->underlying) {
|
if (!bev_ssl->underlying) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user