diff options
author | 2023-10-30 08:02:24 +0000 | |
---|---|---|
committer | 2023-10-30 10:33:48 +0000 | |
commit | 84b7cff1a7082d32e9043014e57db7b4ed2aa7a0 (patch) | |
tree | 3c0e5286d25e8a86b082d21728086840c58f58fd | |
parent | 9636af27d208552aa679437cbf3e292a6033a23d (diff) |
Revert "Use std::function instead of base::function_ref"
Revert submission 2780893
Reason for revert: breaking boot tests
Bug: 308214260
Reverted changes: /q/submissionid:2780893
Change-Id: Ibbd9bf2c9eb1389c9b8217cc75a98a3ec13b77d8
-rw-r--r-- | libs/binder/RpcState.cpp | 35 | ||||
-rw-r--r-- | libs/binder/RpcState.h | 3 | ||||
-rw-r--r-- | libs/binder/RpcTransportRaw.cpp | 6 | ||||
-rw-r--r-- | libs/binder/RpcTransportTipcAndroid.cpp | 5 | ||||
-rw-r--r-- | libs/binder/RpcTransportTls.cpp | 20 | ||||
-rw-r--r-- | libs/binder/RpcTransportUtils.h | 2 | ||||
-rw-r--r-- | libs/binder/include/binder/Functional.h | 9 | ||||
-rw-r--r-- | libs/binder/include/binder/RpcTransport.h | 14 | ||||
-rw-r--r-- | libs/binder/trusty/RpcTransportTipcTrusty.cpp | 6 |
9 files changed, 42 insertions, 58 deletions
diff --git a/libs/binder/RpcState.cpp b/libs/binder/RpcState.cpp index 09032dd4dd..aa26b91274 100644 --- a/libs/binder/RpcState.cpp +++ b/libs/binder/RpcState.cpp @@ -359,7 +359,7 @@ RpcState::CommandData::CommandData(size_t size) : mSize(size) { status_t RpcState::rpcSend( const sp<RpcSession::RpcConnection>& connection, const sp<RpcSession>& session, const char* what, iovec* iovs, int niovs, - const std::optional<SmallFunction<status_t()>>& altPoll, + const std::optional<android::base::function_ref<status_t()>>& altPoll, const std::vector<std::variant<base::unique_fd, base::borrowed_fd>>* ancillaryFds) { for (int i = 0; i < niovs; i++) { LOG_RPC_DETAIL("Sending %s (part %d of %d) on RpcTransport %p: %s", @@ -604,24 +604,25 @@ status_t RpcState::transactAddress(const sp<RpcSession::RpcConnection>& connecti {const_cast<uint8_t*>(data.data()), data.dataSize()}, objectTableSpan.toIovec(), }; - auto altPoll = [&] { - if (waitUs > kWaitLogUs) { - ALOGE("Cannot send command, trying to process pending refcounts. Waiting " - "%zuus. Too many oneway calls?", - waitUs); - } + if (status_t status = rpcSend( + connection, session, "transaction", iovs, arraysize(iovs), + [&] { + if (waitUs > kWaitLogUs) { + ALOGE("Cannot send command, trying to process pending refcounts. Waiting " + "%zuus. Too many oneway calls?", + waitUs); + } - if (waitUs > 0) { - usleep(waitUs); - waitUs = std::min(kWaitMaxUs, waitUs * 2); - } else { - waitUs = 1; - } + if (waitUs > 0) { + usleep(waitUs); + waitUs = std::min(kWaitMaxUs, waitUs * 2); + } else { + waitUs = 1; + } - return drainCommands(connection, session, CommandType::CONTROL_ONLY); - }; - if (status_t status = rpcSend(connection, session, "transaction", iovs, arraysize(iovs), - std::ref(altPoll), rpcFields->mFds.get()); + return drainCommands(connection, session, CommandType::CONTROL_ONLY); + }, + rpcFields->mFds.get()); status != OK) { // rpcSend calls shutdownAndWait, so all refcounts should be reset. If we ever tolerate // errors here, then we may need to undo the binder-sent counts for the transaction as diff --git a/libs/binder/RpcState.h b/libs/binder/RpcState.h index 2a954e632b..1fe71a5a78 100644 --- a/libs/binder/RpcState.h +++ b/libs/binder/RpcState.h @@ -16,7 +16,6 @@ #pragma once #include <android-base/unique_fd.h> -#include <binder/Functional.h> #include <binder/IBinder.h> #include <binder/Parcel.h> #include <binder/RpcSession.h> @@ -191,7 +190,7 @@ private: [[nodiscard]] status_t rpcSend( const sp<RpcSession::RpcConnection>& connection, const sp<RpcSession>& session, const char* what, iovec* iovs, int niovs, - const std::optional<binder::impl::SmallFunction<status_t()>>& altPoll, + const std::optional<android::base::function_ref<status_t()>>& altPoll, const std::vector<std::variant<base::unique_fd, base::borrowed_fd>>* ancillaryFds = nullptr); [[nodiscard]] status_t rpcRec( diff --git a/libs/binder/RpcTransportRaw.cpp b/libs/binder/RpcTransportRaw.cpp index ffa315191d..c089811561 100644 --- a/libs/binder/RpcTransportRaw.cpp +++ b/libs/binder/RpcTransportRaw.cpp @@ -29,8 +29,6 @@ namespace android { -using namespace android::binder::impl; - // RpcTransport with TLS disabled. class RpcTransportRaw : public RpcTransport { public: @@ -56,7 +54,7 @@ public: status_t interruptableWriteFully( FdTrigger* fdTrigger, iovec* iovs, int niovs, - const std::optional<SmallFunction<status_t()>>& altPoll, + const std::optional<android::base::function_ref<status_t()>>& altPoll, const std::vector<std::variant<base::unique_fd, base::borrowed_fd>>* ancillaryFds) override { bool sentFds = false; @@ -72,7 +70,7 @@ public: status_t interruptableReadFully( FdTrigger* fdTrigger, iovec* iovs, int niovs, - const std::optional<SmallFunction<status_t()>>& altPoll, + const std::optional<android::base::function_ref<status_t()>>& altPoll, std::vector<std::variant<base::unique_fd, base::borrowed_fd>>* ancillaryFds) override { auto recv = [&](iovec* iovs, int niovs) -> ssize_t { return binder::os::receiveMessageFromSocket(mSocket, iovs, niovs, ancillaryFds); diff --git a/libs/binder/RpcTransportTipcAndroid.cpp b/libs/binder/RpcTransportTipcAndroid.cpp index cf0360f28b..0c81d83032 100644 --- a/libs/binder/RpcTransportTipcAndroid.cpp +++ b/libs/binder/RpcTransportTipcAndroid.cpp @@ -26,7 +26,6 @@ #include "RpcState.h" #include "RpcTransportUtils.h" -using namespace android::binder::impl; using android::base::Error; using android::base::Result; @@ -76,7 +75,7 @@ public: status_t interruptableWriteFully( FdTrigger* fdTrigger, iovec* iovs, int niovs, - const std::optional<SmallFunction<status_t()>>& altPoll, + const std::optional<android::base::function_ref<status_t()>>& altPoll, const std::vector<std::variant<base::unique_fd, base::borrowed_fd>>* ancillaryFds) override { auto writeFn = [&](iovec* iovs, size_t niovs) -> ssize_t { @@ -94,7 +93,7 @@ public: status_t interruptableReadFully( FdTrigger* fdTrigger, iovec* iovs, int niovs, - const std::optional<SmallFunction<status_t()>>& altPoll, + const std::optional<android::base::function_ref<status_t()>>& altPoll, std::vector<std::variant<base::unique_fd, base::borrowed_fd>>* /*ancillaryFds*/) override { auto readFn = [&](iovec* iovs, size_t niovs) -> ssize_t { diff --git a/libs/binder/RpcTransportTls.cpp b/libs/binder/RpcTransportTls.cpp index 2cbfd8d7e3..efb09e9004 100644 --- a/libs/binder/RpcTransportTls.cpp +++ b/libs/binder/RpcTransportTls.cpp @@ -38,9 +38,6 @@ #endif namespace android { - -using namespace android::binder::impl; - namespace { // Implement BIO for socket that ignores SIGPIPE. @@ -184,9 +181,10 @@ public: // |sslError| should be from Ssl::getError(). // If |sslError| is WANT_READ / WANT_WRITE, poll for POLLIN / POLLOUT respectively. Otherwise // return error. Also return error if |fdTrigger| is triggered before or during poll(). - status_t pollForSslError(const android::RpcTransportFd& fd, int sslError, FdTrigger* fdTrigger, - const char* fnString, int additionalEvent, - const std::optional<SmallFunction<status_t()>>& altPoll) { + status_t pollForSslError( + const android::RpcTransportFd& fd, int sslError, FdTrigger* fdTrigger, + const char* fnString, int additionalEvent, + const std::optional<android::base::function_ref<status_t()>>& altPoll) { switch (sslError) { case SSL_ERROR_WANT_READ: return handlePoll(POLLIN | additionalEvent, fd, fdTrigger, fnString, altPoll); @@ -202,7 +200,7 @@ private: status_t handlePoll(int event, const android::RpcTransportFd& fd, FdTrigger* fdTrigger, const char* fnString, - const std::optional<SmallFunction<status_t()>>& altPoll) { + const std::optional<android::base::function_ref<status_t()>>& altPoll) { status_t ret; if (altPoll) { ret = (*altPoll)(); @@ -286,12 +284,12 @@ public: status_t pollRead(void) override; status_t interruptableWriteFully( FdTrigger* fdTrigger, iovec* iovs, int niovs, - const std::optional<SmallFunction<status_t()>>& altPoll, + const std::optional<android::base::function_ref<status_t()>>& altPoll, const std::vector<std::variant<base::unique_fd, base::borrowed_fd>>* ancillaryFds) override; status_t interruptableReadFully( FdTrigger* fdTrigger, iovec* iovs, int niovs, - const std::optional<SmallFunction<status_t()>>& altPoll, + const std::optional<android::base::function_ref<status_t()>>& altPoll, std::vector<std::variant<base::unique_fd, base::borrowed_fd>>* ancillaryFds) override; bool isWaiting() override { return mSocket.isInPollingState(); }; @@ -322,7 +320,7 @@ status_t RpcTransportTls::pollRead(void) { status_t RpcTransportTls::interruptableWriteFully( FdTrigger* fdTrigger, iovec* iovs, int niovs, - const std::optional<SmallFunction<status_t()>>& altPoll, + const std::optional<android::base::function_ref<status_t()>>& altPoll, const std::vector<std::variant<base::unique_fd, base::borrowed_fd>>* ancillaryFds) { (void)ancillaryFds; @@ -368,7 +366,7 @@ status_t RpcTransportTls::interruptableWriteFully( status_t RpcTransportTls::interruptableReadFully( FdTrigger* fdTrigger, iovec* iovs, int niovs, - const std::optional<SmallFunction<status_t()>>& altPoll, + const std::optional<android::base::function_ref<status_t()>>& altPoll, std::vector<std::variant<base::unique_fd, base::borrowed_fd>>* ancillaryFds) { (void)ancillaryFds; diff --git a/libs/binder/RpcTransportUtils.h b/libs/binder/RpcTransportUtils.h index a0e502e92a..32f0db805d 100644 --- a/libs/binder/RpcTransportUtils.h +++ b/libs/binder/RpcTransportUtils.h @@ -27,7 +27,7 @@ template <typename SendOrReceive> status_t interruptableReadOrWrite( const android::RpcTransportFd& socket, FdTrigger* fdTrigger, iovec* iovs, int niovs, SendOrReceive sendOrReceiveFun, const char* funName, int16_t event, - const std::optional<binder::impl::SmallFunction<status_t()>>& altPoll) { + const std::optional<android::base::function_ref<status_t()>>& altPoll) { MAYBE_WAIT_IN_FLAKE_MODE; if (niovs < 0) { diff --git a/libs/binder/include/binder/Functional.h b/libs/binder/include/binder/Functional.h index 08e3b214da..058f8339c9 100644 --- a/libs/binder/include/binder/Functional.h +++ b/libs/binder/include/binder/Functional.h @@ -38,13 +38,4 @@ std::unique_ptr<void, std::function<void(void*)>> make_scope_guard(F&& f) { return {reinterpret_cast<void*>(true), std::bind(f)}; } -template <typename T> -class SmallFunction : public std::function<T> { -public: - template <typename F> - SmallFunction(F&& f) : std::function<T>(f) { - assert_small_callable<F>(); - } -}; - } // namespace android::binder::impl diff --git a/libs/binder/include/binder/RpcTransport.h b/libs/binder/include/binder/RpcTransport.h index 115a1732d7..6db9ad983c 100644 --- a/libs/binder/include/binder/RpcTransport.h +++ b/libs/binder/include/binder/RpcTransport.h @@ -25,10 +25,10 @@ #include <variant> #include <vector> +#include <android-base/function_ref.h> #include <android-base/unique_fd.h> #include <utils/Errors.h> -#include <binder/Functional.h> #include <binder/RpcCertificateFormat.h> #include <binder/RpcThreads.h> @@ -85,13 +85,13 @@ public: * error - interrupted (failure or trigger) */ [[nodiscard]] virtual status_t interruptableWriteFully( - FdTrigger* fdTrigger, iovec* iovs, int niovs, - const std::optional<binder::impl::SmallFunction<status_t()>>& altPoll, - const std::vector<std::variant<base::unique_fd, base::borrowed_fd>>* ancillaryFds) = 0; + FdTrigger *fdTrigger, iovec *iovs, int niovs, + const std::optional<android::base::function_ref<status_t()>> &altPoll, + const std::vector<std::variant<base::unique_fd, base::borrowed_fd>> *ancillaryFds) = 0; [[nodiscard]] virtual status_t interruptableReadFully( - FdTrigger* fdTrigger, iovec* iovs, int niovs, - const std::optional<binder::impl::SmallFunction<status_t()>>& altPoll, - std::vector<std::variant<base::unique_fd, base::borrowed_fd>>* ancillaryFds) = 0; + FdTrigger *fdTrigger, iovec *iovs, int niovs, + const std::optional<android::base::function_ref<status_t()>> &altPoll, + std::vector<std::variant<base::unique_fd, base::borrowed_fd>> *ancillaryFds) = 0; /** * Check whether any threads are blocked while polling the transport diff --git a/libs/binder/trusty/RpcTransportTipcTrusty.cpp b/libs/binder/trusty/RpcTransportTipcTrusty.cpp index 6bb45e2e11..692f82d6cd 100644 --- a/libs/binder/trusty/RpcTransportTipcTrusty.cpp +++ b/libs/binder/trusty/RpcTransportTipcTrusty.cpp @@ -29,8 +29,6 @@ namespace android { -using namespace android::binder::impl; - // RpcTransport for Trusty. class RpcTransportTipcTrusty : public RpcTransport { public: @@ -47,7 +45,7 @@ public: status_t interruptableWriteFully( FdTrigger* /*fdTrigger*/, iovec* iovs, int niovs, - const std::optional<SmallFunction<status_t()>>& /*altPoll*/, + const std::optional<android::base::function_ref<status_t()>>& /*altPoll*/, const std::vector<std::variant<base::unique_fd, base::borrowed_fd>>* ancillaryFds) override { if (niovs < 0) { @@ -117,7 +115,7 @@ public: status_t interruptableReadFully( FdTrigger* /*fdTrigger*/, iovec* iovs, int niovs, - const std::optional<SmallFunction<status_t()>>& /*altPoll*/, + const std::optional<android::base::function_ref<status_t()>>& /*altPoll*/, std::vector<std::variant<base::unique_fd, base::borrowed_fd>>* ancillaryFds) override { if (niovs < 0) { return BAD_VALUE; |