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 @@ -650,12 +650,12 @@ 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() { if (rb_.chunk_avail()) { - auto rv = on_read_(*this); + auto rv = (this->*on_read_)(); if (rv != 0) { return rv; } @@ -663,7 +663,7 @@ int ClientHandler::on_read() { 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 @@ -185,8 +185,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 @@ -1464,13 +1464,13 @@ int HttpDownstreamConnection::connected() { return 0; } -int HttpDownstreamConnection::on_read() { return on_read_(*this); } +int HttpDownstreamConnection::on_read() { return (this->*on_read_)(); } -int HttpDownstreamConnection::on_write() { return on_write_(*this); } +int HttpDownstreamConnection::on_write() { return (this->*on_write_)(); } void HttpDownstreamConnection::on_upstream_change(Upstream *upstream) {} -void HttpDownstreamConnection::signal_write() { signal_write_(*this); } +void HttpDownstreamConnection::signal_write() { (this->*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 @@ -91,8 +91,9 @@ public: private: Connection conn_; - std::function on_read_, on_write_, - signal_write_; + int (HttpDownstreamConnection::*on_read_)(); + int (HttpDownstreamConnection::*on_write_)(); + int (HttpDownstreamConnection::*signal_write_)(); Worker *worker_; // nullptr if TLS is not used. SSL_CTX *ssl_ctx_; -- 2.5.5