From 3b3429d8dfdcbeb775344b564d4217a0c3f5cefd Mon Sep 17 00:00:00 2001 From: Teemu Ollakka Date: Sun, 26 Feb 2023 10:31:07 +0200 Subject: [PATCH] Work around GCC 12 warning of uninitialized use MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use pointers to pass state objects to service constructors to work around GCC 12 warning error: member ‘wsrep::mock_storage_service::client_state_’ is used uninitialized --- dbsim/db_storage_engine.cpp | 1 - dbsim/db_threads.cpp | 2 ++ include/wsrep/server_state.hpp | 3 +-- include/wsrep/streaming_context.hpp | 2 +- test/client_state_fixture.hpp | 20 ++++++++++---------- test/mock_client_state.cpp | 12 ++++++------ test/mock_client_state.hpp | 22 ++++++++++++---------- test/mock_server_state.hpp | 22 ++++++++++++---------- test/mock_storage_service.cpp | 2 +- test/server_context_test.cpp | 2 +- 10 files changed, 46 insertions(+), 42 deletions(-) diff --git a/dbsim/db_storage_engine.cpp b/dbsim/db_storage_engine.cpp index 9452e76..4278b81 100644 --- a/dbsim/db_storage_engine.cpp +++ b/dbsim/db_storage_engine.cpp @@ -108,7 +108,6 @@ wsrep::view db::storage_engine::get_view() const void db::storage_engine::validate_position(const wsrep::gtid& gtid) const { - using std::rel_ops::operator<=; if (position_.id() == gtid.id() && gtid.seqno() <= position_.seqno()) { std::ostringstream os; diff --git a/dbsim/db_threads.cpp b/dbsim/db_threads.cpp index d066c65..10b580d 100644 --- a/dbsim/db_threads.cpp +++ b/dbsim/db_threads.cpp @@ -22,10 +22,12 @@ #include "wsrep/logger.hpp" #include +#include #include #include #include +#include #include #include #include diff --git a/include/wsrep/server_state.hpp b/include/wsrep/server_state.hpp index e0f9d8c..daa90dc 100644 --- a/include/wsrep/server_state.hpp +++ b/include/wsrep/server_state.hpp @@ -553,8 +553,7 @@ namespace wsrep return state(lock); } - enum state state(wsrep::unique_lock& - lock WSREP_UNUSED) const; + enum state state(wsrep::unique_lock& lock) const; /** * Get provider status variables. diff --git a/include/wsrep/streaming_context.hpp b/include/wsrep/streaming_context.hpp index 45b19c9..2b0ef0f 100644 --- a/include/wsrep/streaming_context.hpp +++ b/include/wsrep/streaming_context.hpp @@ -165,7 +165,7 @@ namespace wsrep void cleanup(); private: - void check_fragment_seqno(wsrep::seqno seqno WSREP_UNUSED); + void check_fragment_seqno(wsrep::seqno seqno); size_t fragments_certified_; std::vector fragments_; diff --git a/test/client_state_fixture.hpp b/test/client_state_fixture.hpp index a26adee..ab784f2 100644 --- a/test/client_state_fixture.hpp +++ b/test/client_state_fixture.hpp @@ -31,7 +31,7 @@ namespace struct replicating_client_fixture_sync_rm { replicating_client_fixture_sync_rm() - : server_service(sc) + : server_service(&sc) , sc("s1", wsrep::server_state::rm_sync, server_service) , cc(sc, wsrep::client_id(1), wsrep::client_state::m_local) @@ -54,7 +54,7 @@ namespace struct replicating_two_clients_fixture_sync_rm { replicating_two_clients_fixture_sync_rm() - : server_service(sc) + : server_service(&sc) , sc("s1", wsrep::server_state::rm_sync, server_service) , cc1(sc, wsrep::client_id(1), wsrep::client_state::m_local) @@ -83,7 +83,7 @@ namespace struct replicating_client_fixture_async_rm { replicating_client_fixture_async_rm() - : server_service(sc) + : server_service(&sc) , sc("s1", wsrep::server_state::rm_async, server_service) , cc(sc, wsrep::client_id(1), wsrep::client_state::m_local) @@ -106,7 +106,7 @@ namespace struct replicating_client_fixture_2pc { replicating_client_fixture_2pc() - : server_service(sc) + : server_service(&sc) , sc("s1", wsrep::server_state::rm_sync, server_service) , cc(sc, wsrep::client_id(1), wsrep::client_state::m_local) @@ -130,7 +130,7 @@ namespace struct replicating_client_fixture_autocommit { replicating_client_fixture_autocommit() - : server_service(sc) + : server_service(&sc) , sc("s1", wsrep::server_state::rm_sync, server_service) , cc(sc, wsrep::client_id(1), wsrep::client_state::m_local) @@ -154,7 +154,7 @@ namespace struct applying_client_fixture { applying_client_fixture() - : server_service(sc) + : server_service(&sc) , sc("s1", wsrep::server_state::rm_async, server_service) , cc(sc, @@ -193,7 +193,7 @@ namespace struct applying_client_fixture_2pc { applying_client_fixture_2pc() - : server_service(sc) + : server_service(&sc) , sc("s1", wsrep::server_state::rm_async, server_service) , cc(sc, @@ -228,7 +228,7 @@ namespace struct streaming_client_fixture_row { streaming_client_fixture_row() - : server_service(sc) + : server_service(&sc) , sc("s1", wsrep::server_state::rm_sync, server_service) , cc(sc, wsrep::client_id(1), @@ -254,7 +254,7 @@ namespace struct streaming_client_fixture_byte { streaming_client_fixture_byte() - : server_service(sc) + : server_service(&sc) , sc("s1", wsrep::server_state::rm_sync, server_service) , cc(sc, wsrep::client_id(1), @@ -279,7 +279,7 @@ namespace struct streaming_client_fixture_statement { streaming_client_fixture_statement() - : server_service(sc) + : server_service(&sc) , sc("s1", wsrep::server_state::rm_sync, server_service) , cc(sc, wsrep::client_id(1), diff --git a/test/mock_client_state.cpp b/test/mock_client_state.cpp index 03e90d0..2cb804c 100644 --- a/test/mock_client_state.cpp +++ b/test/mock_client_state.cpp @@ -24,11 +24,11 @@ int wsrep::mock_client_service::bf_rollback() { int ret(0); - if (client_state_.before_rollback()) + if (client_state_->before_rollback()) { ret = 1; } - else if (client_state_.after_rollback()) + else if (client_state_->after_rollback()) { ret = 1; } @@ -38,11 +38,11 @@ int wsrep::mock_client_service::bf_rollback() enum wsrep::provider::status wsrep::mock_client_service::replay() { - wsrep::mock_high_priority_service hps(client_state_.server_state(), - &client_state_, true); + wsrep::mock_high_priority_service hps(client_state_->server_state(), + client_state_, true); enum wsrep::provider::status ret( - client_state_.provider().replay( - client_state_.transaction().ws_handle(), + client_state_->provider().replay( + client_state_->transaction().ws_handle(), &hps)); ++replays_; return ret; diff --git a/test/mock_client_state.hpp b/test/mock_client_state.hpp index 041c4fd..fa71fbc 100644 --- a/test/mock_client_state.hpp +++ b/test/mock_client_state.hpp @@ -60,7 +60,7 @@ namespace wsrep class mock_client_service : public wsrep::client_service { public: - mock_client_service(wsrep::mock_client_state& client_state) + mock_client_service(wsrep::mock_client_state* client_state) : wsrep::client_service() , is_autocommit_() , do_2pc_() @@ -79,6 +79,8 @@ namespace wsrep , unordered_replays_() , aborts_() { } + mock_client_service(const mock_client_service&) = delete; + mock_client_service& operator=(const mock_client_service&) = delete; int bf_rollback() WSREP_OVERRIDE; @@ -93,8 +95,8 @@ namespace wsrep { if (bf_abort_during_fragment_removal_) { - client_state_.before_rollback(); - client_state_.after_rollback(); + client_state_->before_rollback(); + client_state_->after_rollback(); return 1; } else @@ -122,7 +124,7 @@ namespace wsrep lock.unlock(); if (bf_abort_during_wait_) { - wsrep_test::bf_abort_unordered(client_state_); + wsrep_test::bf_abort_unordered(*client_state_); } lock.lock(); } @@ -135,7 +137,7 @@ namespace wsrep } static const char buf[1] = { 1 }; wsrep::const_buffer data = wsrep::const_buffer(buf, 1); - return client_state_.append_data(data); + return client_state_->append_data(data); } void cleanup_transaction() WSREP_OVERRIDE { } @@ -158,7 +160,7 @@ namespace wsrep buffer.push_back(&buf[0], &buf[1]); wsrep::const_buffer data(buffer.data(), buffer.size()); position = buffer.size(); - return client_state_.append_data(data); + return client_state_->append_data(data); } void store_globals() WSREP_OVERRIDE { } @@ -186,10 +188,10 @@ namespace wsrep switch (sync_point_action_) { case spa_bf_abort_unordered: - wsrep_test::bf_abort_unordered(client_state_); + wsrep_test::bf_abort_unordered(*client_state_); break; case spa_bf_abort_ordered: - wsrep_test::bf_abort_ordered(client_state_); + wsrep_test::bf_abort_ordered(*client_state_); break; } } @@ -228,7 +230,7 @@ namespace wsrep size_t unordered_replays() const { return unordered_replays_; } size_t aborts() const { return aborts_; } private: - wsrep::mock_client_state& client_state_; + wsrep::mock_client_state* client_state_; bool will_replay_called_; size_t replays_; size_t unordered_replays_; @@ -244,7 +246,7 @@ namespace wsrep const wsrep::client_id& id, enum wsrep::client_state::mode mode) : mock_client_state(server_state, *this, id, mode) - , mock_client_service(static_cast(*this)) + , mock_client_service(static_cast(this)) { } int after_row() diff --git a/test/mock_server_state.hpp b/test/mock_server_state.hpp index 730c9c0..e3d8969 100644 --- a/test/mock_server_state.hpp +++ b/test/mock_server_state.hpp @@ -34,7 +34,7 @@ namespace wsrep class mock_server_service : public wsrep::server_service { public: - mock_server_service(wsrep::server_state& server_state) + mock_server_service(wsrep::server_state* server_state) : sync_point_enabled_() , sync_point_action_() , sst_before_init_() @@ -44,18 +44,20 @@ namespace wsrep , logged_view_() , position_() { } + mock_server_service(const mock_server_service&) = delete; + mock_server_service& operator=(const mock_server_service&) = delete; wsrep::storage_service* storage_service(wsrep::client_service&) WSREP_OVERRIDE { - return new wsrep::mock_storage_service(server_state_, + return new wsrep::mock_storage_service(*server_state_, wsrep::client_id(++last_client_id_)); } wsrep::storage_service* storage_service(wsrep::high_priority_service&) WSREP_OVERRIDE { - return new wsrep::mock_storage_service(server_state_, + return new wsrep::mock_storage_service(*server_state_, wsrep::client_id(++last_client_id_)); } @@ -70,11 +72,11 @@ namespace wsrep WSREP_OVERRIDE { wsrep::mock_client* cs(new wsrep::mock_client( - server_state_, + *server_state_, wsrep::client_id(++last_client_id_), wsrep::client_state::m_high_priority)); wsrep::mock_high_priority_service* ret( - new wsrep::mock_high_priority_service(server_state_, + new wsrep::mock_high_priority_service(*server_state_, cs, false)); cs->open(cs->id()); cs->before_command(); @@ -85,11 +87,11 @@ namespace wsrep wsrep::high_priority_service&) WSREP_OVERRIDE { wsrep::mock_client* cs(new wsrep::mock_client( - server_state_, + *server_state_, wsrep::client_id(++last_client_id_), wsrep::client_state::m_high_priority)); wsrep::mock_high_priority_service* ret( - new wsrep::mock_high_priority_service(server_state_, + new wsrep::mock_high_priority_service(*server_state_, cs, false)); cs->open(cs->id()); cs->before_command(); @@ -115,7 +117,7 @@ namespace wsrep void log_message(enum wsrep::log::level level, const char* message) WSREP_OVERRIDE { - wsrep::log(level, server_state_.name().c_str()) << message; + wsrep::log(level, server_state_->name().c_str()) << message; } void log_dummy_write_set(wsrep::client_state&, const wsrep::ws_meta&) @@ -196,7 +198,7 @@ namespace wsrep case spa_none: break; case spa_initialize: - server_state_.initialized(); + server_state_->initialized(); break; case spa_initialize_error: throw wsrep::runtime_error("Inject initialization error"); @@ -224,7 +226,7 @@ namespace wsrep position_ = position; } private: - wsrep::server_state& server_state_; + wsrep::server_state* server_state_; unsigned long long last_client_id_; unsigned long long last_transaction_id_; wsrep::view logged_view_; diff --git a/test/mock_storage_service.cpp b/test/mock_storage_service.cpp index a455b9b..db513bc 100644 --- a/test/mock_storage_service.cpp +++ b/test/mock_storage_service.cpp @@ -25,7 +25,7 @@ wsrep::mock_storage_service::mock_storage_service( wsrep::server_state& server_state, wsrep::client_id client_id) - : client_service_(client_state_) + : client_service_(&client_state_) , client_state_(server_state, client_service_, client_id, wsrep::client_state::m_high_priority) { diff --git a/test/server_context_test.cpp b/test/server_context_test.cpp index 6934b1c..3278d3b 100644 --- a/test/server_context_test.cpp +++ b/test/server_context_test.cpp @@ -26,7 +26,7 @@ namespace struct server_fixture_base { server_fixture_base() - : server_service(ss) + : server_service(&ss) , ss("s1", wsrep::server_state::rm_sync, server_service) , cc(ss,