From 9a4134e39b4bd971e27c27090c752a27222c2e9d Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Wed, 22 Sep 2021 04:08:25 +0200 Subject: [PATCH] EHN: Wait for future in destructor --- include/CMakeLists.txt | 2 -- include/caosdb/logging.h | 10 +++++----- src/caosdb/transaction.cpp | 8 ++++---- src/caosdb/unary_rpc_handler.cpp | 5 ++--- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 18d9334..d480ec1 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -42,8 +42,6 @@ set(libcaosdb_INCL ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/utility.h ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/value.h ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/register_file_upload_handler.h - # TODO this file is still missing - # ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/register_file_download_handler.h ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/upload_request_handler.h ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/download_request_handler.h ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/file_writer.h diff --git a/include/caosdb/logging.h b/include/caosdb/logging.h index a119c9c..896b16d 100644 --- a/include/caosdb/logging.h +++ b/include/caosdb/logging.h @@ -30,11 +30,11 @@ #include <boost/log/utility/setup/settings.hpp> // for settings #include <boost/smart_ptr/intrusive_ptr.hpp> // for intrusive_ptr #include <boost/smart_ptr/intrusive_ref_counter.hpp> // for intrusive_p... -#include <boost/log/core/record.hpp> // for record -#include <boost/log/detail/attachable_sstream_buf.hpp> // for basic_ostri... -#include <boost/preprocessor/seq/limits/enum_256.hpp> // for BOOST_PP_SE... -#include <boost/preprocessor/seq/limits/size_256.hpp> // for BOOST_PP_SE... -#include <iosfwd> // for streamsize +#include <boost/log/core/record.hpp> // for record +#include <boost/log/detail/attachable_sstream_buf.hpp> // for basic_ostri... +#include <boost/preprocessor/seq/limits/enum_256.hpp> // for BOOST_PP_SE... +#include <boost/preprocessor/seq/limits/size_256.hpp> // for BOOST_PP_SE... +#include <iosfwd> // for streamsize #include <memory> // for shared_ptr #include <string> // for string #include <vector> // for vector diff --git a/src/caosdb/transaction.cpp b/src/caosdb/transaction.cpp index 0a17bc9..2507287 100644 --- a/src/caosdb/transaction.cpp +++ b/src/caosdb/transaction.cpp @@ -441,20 +441,17 @@ auto Transaction::ProcessCalls() -> TransactionStatus { if (!res) { // The handler has finished it's work result = handler_->GetStatus(); - handler_.reset(); return result; } } else { std::string description("Invalid tag delivered by notification queue."); CAOSDB_LOG_ERROR(logger_name) << description; - handler_.reset(); return TransactionStatus::RPC_ERROR(description); } } break; case NextStatus::SHUTDOWN: { CAOSDB_LOG_ERROR(logger_name) << "Notification queue has been shut down unexpectedly."; result = handler_->GetStatus(); - handler_.reset(); return result; } break; case NextStatus::TIMEOUT: { @@ -463,7 +460,6 @@ auto Transaction::ProcessCalls() -> TransactionStatus { default: CAOSDB_LOG_FATAL(logger_name) << "Got an invalid NextStatus from CompletionQueue."; result = handler_->GetStatus(); - handler_.reset(); return result; } } @@ -494,6 +490,10 @@ void Transaction::Cancel() { while (completion_queue.Next(&ignoredTag, &ok)) { ; } + + if (transaction_future.valid()) { + transaction_future.wait(); + } } } // namespace caosdb::transaction diff --git a/src/caosdb/unary_rpc_handler.cpp b/src/caosdb/unary_rpc_handler.cpp index 0c32462..4db2a94 100644 --- a/src/caosdb/unary_rpc_handler.cpp +++ b/src/caosdb/unary_rpc_handler.cpp @@ -65,6 +65,7 @@ namespace caosdb::transaction { bool UnaryRpcHandler::OnNext(bool ok) { + CAOSDB_LOG_TRACE_ENTER_AND_LEAVE(logger_name, "UnaryRpcHandler::OnNext(bool)") try { if (ok) { if (state_ == CallState::NewCall) { @@ -112,7 +113,7 @@ void UnaryRpcHandler::Cancel() { } void UnaryRpcHandler::handleCallCompleteState() { - CAOSDB_LOG_TRACE(logger_name) << "Enter UnaryRpcHandler::handleCallCompleteState"; + CAOSDB_LOG_TRACE_ENTER_AND_LEAVE(logger_name, "UnaryRpcHandler::handleCallCompleteState()") switch (status_.error_code()) { case grpc::OK: @@ -127,8 +128,6 @@ void UnaryRpcHandler::handleCallCompleteState() { << "): " << description; break; } - - CAOSDB_LOG_TRACE(logger_name) << "Leave UnaryRpcHandler::handleCallCompleteState"; } } // namespace caosdb::transaction -- GitLab