From 9fcf3200342603e9aa86a4bd3ba62f890237a200 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Tue, 26 Jul 2016 12:58:46 +0200 Subject: [PATCH] nghttpx: avoid using std::function to fix crash on armv7hl Bug: https://bugzilla.redhat.com/1358845 --- src/shrpx_client_handler.cc | 8 ++++---- src/shrpx_client_handler.h | 6 ++++-- src/shrpx_http_downstream_connection.cc | 6 +++--- src/shrpx_http_downstream_connection.h | 5 +++-- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/shrpx_client_handler.cc b/src/shrpx_client_handler.cc index 2c9b2a1..890143e 100644 --- a/src/shrpx_client_handler.cc +++ b/src/shrpx_client_handler.cc @@ -642,18 +642,18 @@ int ClientHandler::validate_next_proto() { return -1; } -int ClientHandler::do_read() { return read_(*this); } -int ClientHandler::do_write() { return write_(*this); } +int ClientHandler::do_read() { return (this->*read_)(); } +int ClientHandler::do_write() { return (this->*write_)(); } int ClientHandler::on_read() { - auto rv = on_read_(*this); + auto rv = (this->*on_read_)(); if (rv != 0) { return rv; } conn_.handle_tls_pending_read(); return 0; } -int ClientHandler::on_write() { return on_write_(*this); } +int ClientHandler::on_write() { return (this->*on_write_)(); } const StringRef &ClientHandler::get_ipaddr() const { return ipaddr_; } diff --git a/src/shrpx_client_handler.h b/src/shrpx_client_handler.h index bdfdafd..08f42b3 100644 --- a/src/shrpx_client_handler.h +++ b/src/shrpx_client_handler.h @@ -183,8 +183,10 @@ private: StringRef forwarded_for_; // lowercased TLS SNI which client sent. StringRef sni_; - std::function read_, write_; - std::function on_read_, on_write_; + int (ClientHandler::*read_)(); + int (ClientHandler::*write_)(); + int (ClientHandler::*on_read_)(); + int (ClientHandler::*on_write_)(); // Address of frontend listening socket const UpstreamAddr *faddr_; Worker *worker_; diff --git a/src/shrpx_http_downstream_connection.cc b/src/shrpx_http_downstream_connection.cc index 077844c..8a38788 100644 --- a/src/shrpx_http_downstream_connection.cc +++ b/src/shrpx_http_downstream_connection.cc @@ -1209,13 +1209,13 @@ int HttpDownstreamConnection::connected() { return 0; } -int HttpDownstreamConnection::on_read() { return do_read_(*this); } +int HttpDownstreamConnection::on_read() { return (this->*do_read_)(); } -int HttpDownstreamConnection::on_write() { return do_write_(*this); } +int HttpDownstreamConnection::on_write() { return (this->*do_write_)(); } void HttpDownstreamConnection::on_upstream_change(Upstream *upstream) {} -void HttpDownstreamConnection::signal_write() { do_signal_write_(*this); } +void HttpDownstreamConnection::signal_write() { (this->*do_signal_write_)(); } int HttpDownstreamConnection::actual_signal_write() { ev_feed_event(conn_.loop, &conn_.wev, EV_WRITE); diff --git a/src/shrpx_http_downstream_connection.h b/src/shrpx_http_downstream_connection.h index 8fad535..0ab430c 100644 --- a/src/shrpx_http_downstream_connection.h +++ b/src/shrpx_http_downstream_connection.h @@ -84,8 +84,9 @@ public: private: Connection conn_; - std::function do_read_, do_write_, - do_signal_write_; + int (HttpDownstreamConnection::*do_read_)(); + int (HttpDownstreamConnection::*do_write_)(); + int (HttpDownstreamConnection::*do_signal_write_)(); Worker *worker_; // nullptr if TLS is not used. SSL_CTX *ssl_ctx_; -- 2.5.5