This is an automated email from the ASF dual-hosted git repository. tillt pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mesos.git
commit e67022fd95571fb093e41ad5fc92457328e7f91f Author: Till Toenshoff <[email protected]> AuthorDate: Thu Oct 4 15:40:43 2018 +0200 Fixed ssl build specific incompatiblity with libevent later than 2.1.5. Up until and including libevent 2.1.5 (beta) the buffer events EV_READ and EV_WRITE were enabled by default in the openssl related socket setup. That got changed by f4b6284b8393dbabf389ddce734a30f4cdeffa17 within libevent; the default expectancy of read and write buffer events got removed. The changes in libevent in turn caused our implementation on top of it to fail, typically directly after accept and connect calls. The libevent maintainer Azat Khuzhin has generously been helping us out by debugging and fixing the incomplete setup within libprocess. This patch is based on Azat's suggestions from https://goo.gl/4CK3PD. It has been validated against libevent 2.0.22, 2.1.8 and 2.2 (alpha) on macOS 10.14.1 and Ubuntu 16.04. Review: https://reviews.apache.org/r/68906/ --- 3rdparty/libprocess/src/posix/libevent/libevent_ssl_socket.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/3rdparty/libprocess/src/posix/libevent/libevent_ssl_socket.cpp b/3rdparty/libprocess/src/posix/libevent/libevent_ssl_socket.cpp index 436b389..bc8f782 100644 --- a/3rdparty/libprocess/src/posix/libevent/libevent_ssl_socket.cpp +++ b/3rdparty/libprocess/src/posix/libevent/libevent_ssl_socket.cpp @@ -595,6 +595,10 @@ Future<Nothing> LibeventSSLSocketImpl::connect(const Address& address) &LibeventSSLSocketImpl::event_callback, CHECK_NOTNULL(self->event_loop_handle)); + // Explicitly enable read and write bufferevents as needed + // for libevent >= 2.1.6. See MESOS-9265. + bufferevent_enable(self->bev, EV_READ | EV_WRITE); + if (bufferevent_socket_connect( self->bev, reinterpret_cast<sockaddr*>(&addr), @@ -1207,6 +1211,10 @@ void LibeventSSLSocketImpl::accept_SSL_callback(AcceptRequest* request) &LibeventSSLSocketImpl::event_callback, CHECK_NOTNULL(impl->event_loop_handle)); + // Explicitly enable read and write bufferevents as needed + // for libevent >= 2.1.6. See MESOS-9265. + bufferevent_enable(bev, EV_READ | EV_WRITE); + request->promise.set(std::dynamic_pointer_cast<SocketImpl>(impl)); } else if (events & BEV_EVENT_ERROR) { std::ostringstream stream;
