]> granicus.if.org Git - libevent/commit
Fix hangs due to watermarks overruns in bufferevents implementations
authorAzat Khuzhin <a3at.mail@gmail.com>
Wed, 17 Oct 2018 20:21:17 +0000 (23:21 +0300)
committerAzat Khuzhin <a3at.mail@gmail.com>
Wed, 17 Oct 2018 20:21:17 +0000 (23:21 +0300)
commit5a455acd3bdf9a0117f909450ac7ea693ca93912
treed0cbcc7f803d93d0c89b90d600cc76a6e1ba8d2e
parenta5b2ed56c3da47e4815bea9b20a5a97567b53dde
Fix hangs due to watermarks overruns in bufferevents implementations

Some implementations of bufferevents (for example openssl) can overrun
read high watermark.
And after this if user callback will not drain enough data it will be
suspended (i.e. it will not be runned again anymore).
This is not the expecting behaviour as one may guess, since in this case
the data will never be read. Hence once we detected that the watermark
exceeded (even after calling user callback) we will schedule the
callback again.

This also can be fixed in bufferevent openssl implementation (by
strictly limiting how much data is added to the read buffer according to
read high watermark), but since this data is already available (and in
memory) there is no point in doing so.
bufferevent.c
include/event2/bufferevent.h