From 91c7e469c25ff334d766c1c56123cf37097ec38f Mon Sep 17 00:00:00 2001 From: Johnny Willemsen Date: Mon, 9 Nov 2020 16:23:20 +0100 Subject: [PATCH 1/4] Make use of std::atomic for the reference count of the ACE event handler * ACE/ace/Event_Handler.h: --- ACE/ace/Event_Handler.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ACE/ace/Event_Handler.h b/ACE/ace/Event_Handler.h index 5b97b6457a1a2..a85d24c063b1b 100644 --- a/ACE/ace/Event_Handler.h +++ b/ACE/ace/Event_Handler.h @@ -19,9 +19,9 @@ #endif /* ACE_LACKS_PRAGMA_ONCE */ #include "ace/os_include/os_signal.h" -#include "ace/Atomic_Op.h" #include "ace/OS_NS_Thread.h" #include "ace/Synch_Traits.h" +#include ACE_BEGIN_VERSIONED_NAMESPACE_DECL @@ -286,7 +286,7 @@ class ACE_Export ACE_Event_Handler int priority = ACE_Event_Handler::LO_PRIORITY); /// Typedef for implementation of reference counting. - typedef ACE_Atomic_Op Atomic_Reference_Count; + typedef std::atomic Atomic_Reference_Count; /// Reference count. Atomic_Reference_Count reference_count_; From 6f4a5bfa8b72c1da575d023351434840f70afa6a Mon Sep 17 00:00:00 2001 From: Johnny Willemsen Date: Mon, 9 Nov 2020 16:28:01 +0100 Subject: [PATCH 2/4] Move include of Synch_Traits.h from the Event Handler to the Reactor headers, not needed anymore for the ACE event handler * ACE/ace/Event_Handler.h: * ACE/ace/Reactor.h: * ACE/ace/Reactor_Impl.h: --- ACE/ace/Event_Handler.h | 1 - ACE/ace/Reactor.h | 1 + ACE/ace/Reactor_Impl.h | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ACE/ace/Event_Handler.h b/ACE/ace/Event_Handler.h index a85d24c063b1b..c7b420c21e041 100644 --- a/ACE/ace/Event_Handler.h +++ b/ACE/ace/Event_Handler.h @@ -20,7 +20,6 @@ #include "ace/os_include/os_signal.h" #include "ace/OS_NS_Thread.h" -#include "ace/Synch_Traits.h" #include ACE_BEGIN_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Reactor.h b/ACE/ace/Reactor.h index 6d7a9c998f079..4ddc980c21a92 100644 --- a/ACE/ace/Reactor.h +++ b/ACE/ace/Reactor.h @@ -30,6 +30,7 @@ // Get ACE_Time_Value in #include "ace/Time_Value.h" +#include "ace/Synch_Traits.h" ACE_BEGIN_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Reactor_Impl.h b/ACE/ace/Reactor_Impl.h index b6513e5ec4b9e..dcb18c666b46f 100644 --- a/ACE/ace/Reactor_Impl.h +++ b/ACE/ace/Reactor_Impl.h @@ -24,6 +24,7 @@ // Event_Handler.h contains the definition of ACE_Reactor_Mask #include "ace/Event_Handler.h" #include "ace/Countdown_Time.h" +#include "ace/Synch_Traits.h" ACE_BEGIN_VERSIONED_NAMESPACE_DECL From 31a55a291d08f8feae1559eaf4d8e6f509f65da0 Mon Sep 17 00:00:00 2001 From: Johnny Willemsen Date: Tue, 10 Nov 2020 12:49:19 +0100 Subject: [PATCH 3/4] Updated these low level tests to use load() instead of value() because of the switch to std::atomic for the ACE event handler reference count. * ACE/tests/MT_Reference_Counted_Event_Handler_Test.cpp: * ACE/tests/MT_Reference_Counted_Notify_Test.cpp: * ACE/tests/Reference_Counted_Event_Handler_Test.cpp: * ACE/tests/Timer_Queue_Reference_Counting_Test.cpp: * ACE/tests/WFMO_Reactor_Test.cpp: --- ...MT_Reference_Counted_Event_Handler_Test.cpp | 10 +++++----- ACE/tests/MT_Reference_Counted_Notify_Test.cpp | 16 ++++++++-------- .../Reference_Counted_Event_Handler_Test.cpp | 18 +++++++++--------- .../Timer_Queue_Reference_Counting_Test.cpp | 8 ++++---- ACE/tests/WFMO_Reactor_Test.cpp | 4 ++-- 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/ACE/tests/MT_Reference_Counted_Event_Handler_Test.cpp b/ACE/tests/MT_Reference_Counted_Event_Handler_Test.cpp index bae36ea9c0ee0..8a25fcf5b10f3 100644 --- a/ACE/tests/MT_Reference_Counted_Event_Handler_Test.cpp +++ b/ACE/tests/MT_Reference_Counted_Event_Handler_Test.cpp @@ -296,7 +296,7 @@ Sender::Sender (ACE_HANDLE handle, if (debug) ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) Reference count in Sender::Sender() is %d\n"), - this->reference_count_.value ())); + this->reference_count_.load ())); } Sender::~Sender (void) @@ -304,7 +304,7 @@ Sender::~Sender (void) if (debug) ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) Reference count in ~Sender::Sender() is %d\n"), - this->reference_count_.value ())); + this->reference_count_.load ())); // Close the socket that we are responsible for. ACE_OS::closesocket (this->handle_); @@ -316,7 +316,7 @@ Sender::handle_input (ACE_HANDLE) if (debug) ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) Reference count in Sender::handle_input() is %d\n"), - this->reference_count_.value ())); + this->reference_count_.load ())); // // In this test, this method is only called when the connection has @@ -417,7 +417,7 @@ Receiver::Receiver (ACE_Thread_Manager &thread_manager, if (debug) ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) Reference count in Receiver::Receiver() is %d\n"), - this->reference_count_.value ())); + this->reference_count_.load ())); } Receiver::~Receiver (void) @@ -425,7 +425,7 @@ Receiver::~Receiver (void) if (debug) ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) Reference count in ~Receiver::Receiver() is %d\n"), - this->reference_count_.value ())); + this->reference_count_.load ())); // Close the socket that we are responsible for. ACE_OS::closesocket (this->handle_); diff --git a/ACE/tests/MT_Reference_Counted_Notify_Test.cpp b/ACE/tests/MT_Reference_Counted_Notify_Test.cpp index 6d6b67a903002..609e78681ae80 100644 --- a/ACE/tests/MT_Reference_Counted_Notify_Test.cpp +++ b/ACE/tests/MT_Reference_Counted_Notify_Test.cpp @@ -60,7 +60,7 @@ Reference_Counted_Event_Handler::Reference_Counted_Event_Handler (void) ((LM_DEBUG, ACE_TEXT ("Reference count in Reference_Counted_Event_Handler() ") ACE_TEXT ("is %d\n"), - this->reference_count_.value ())); + this->reference_count_.load ())); } Reference_Counted_Event_Handler::~Reference_Counted_Event_Handler (void) @@ -70,14 +70,14 @@ Reference_Counted_Event_Handler::~Reference_Counted_Event_Handler (void) ((LM_DEBUG, ACE_TEXT ("Reference count in ~Reference_Counted_Event_Handler() ") ACE_TEXT ("is %d\n"), - this->reference_count_.value ())); + this->reference_count_.load ())); - if (0 != this->reference_count_.value ()) + if (0 != this->reference_count_.load ()) ACE_ERROR ((LM_ERROR, ACE_TEXT ("Reference count in ~Reference_Counted_Event_Handler() ") ACE_TEXT ("should be 0 but is %d\n"), - this->reference_count_.value ())); + this->reference_count_.load ())); } int @@ -88,14 +88,14 @@ Reference_Counted_Event_Handler::handle_input (ACE_HANDLE) ((LM_DEBUG, ACE_TEXT ("Reference count in Reference_Counted_Event_Handler::") ACE_TEXT ("handle_input() is %d\n"), - this->reference_count_.value ())); + this->reference_count_.load ())); - if (2 != this->reference_count_.value ()) + if (2 != this->reference_count_.load ()) ACE_ERROR ((LM_ERROR, ACE_TEXT ("Reference count in Reference_Counted_Event_Handler::") ACE_TEXT ("handle_input() should be 2 but is %d\n"), - this->reference_count_.value ())); + this->reference_count_.load ())); return 0; } @@ -109,7 +109,7 @@ Reference_Counted_Event_Handler::add_reference (void) if (debug) ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Reference count after add_reference() is %d\n"), - this->reference_count_.value ())); + this->reference_count_.load ())); return reference_count; } diff --git a/ACE/tests/Reference_Counted_Event_Handler_Test.cpp b/ACE/tests/Reference_Counted_Event_Handler_Test.cpp index 356fcacc7ae02..4e5dc94ae297b 100644 --- a/ACE/tests/Reference_Counted_Event_Handler_Test.cpp +++ b/ACE/tests/Reference_Counted_Event_Handler_Test.cpp @@ -78,14 +78,14 @@ Reference_Counted_Event_Handler::Reference_Counted_Event_Handler (int &events) ACE_DEBUG ((LM_DEBUG, "Reference count in Reference_Counted_Event_Handler() is %d\n", - this->reference_count_.value ())); + this->reference_count_.load ())); } Reference_Counted_Event_Handler::~Reference_Counted_Event_Handler (void) { ACE_DEBUG ((LM_DEBUG, "Reference count in ~Reference_Counted_Event_Handler() is %d\n", - this->reference_count_.value ())); + this->reference_count_.load ())); this->pipe_.close (); } @@ -95,7 +95,7 @@ Reference_Counted_Event_Handler::handle_input (ACE_HANDLE) { ACE_DEBUG ((LM_DEBUG, "Reference count in Reference_Counted_Event_Handler::handle_input() is %d\n", - this->reference_count_.value ())); + this->reference_count_.load ())); --this->events_; @@ -126,7 +126,7 @@ Reference_Counted_Event_Handler::handle_output (ACE_HANDLE) { ACE_DEBUG ((LM_DEBUG, "Reference count in Reference_Counted_Event_Handler::handle_output() is %d\n", - this->reference_count_.value ())); + this->reference_count_.load ())); --this->events_; @@ -152,7 +152,7 @@ Reference_Counted_Event_Handler::handle_timeout (const ACE_Time_Value &, ACE_DEBUG ((LM_DEBUG, "Reference count in Reference_Counted_Event_Handler::handle_timeout() for arg = %C is %d\n", (const char *) arg, - this->reference_count_.value ())); + this->reference_count_.load ())); --this->events_; @@ -176,7 +176,7 @@ Reference_Counted_Event_Handler::handle_close (ACE_HANDLE handle, "Reference count is %d\n", handle, masks, - this->reference_count_.value ())); + this->reference_count_.load ())); return 0; } @@ -189,7 +189,7 @@ Reference_Counted_Event_Handler::add_reference (void) ACE_DEBUG ((LM_DEBUG, "Reference count after add_reference() is %d\n", - this->reference_count_.value ())); + this->reference_count_.load ())); return reference_count; } @@ -854,7 +854,7 @@ Closed_In_Upcall_Event_Handler::handle_close (ACE_HANDLE handle, ACE_TEXT ("Reference count is %d\n"), handle, masks, - this->reference_count_.value ())); + this->reference_count_.load ())); return 0; } @@ -867,7 +867,7 @@ Closed_In_Upcall_Event_Handler::add_reference (void) ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Reference count after add_reference() is %d\n"), - this->reference_count_.value ())); + this->reference_count_.load ())); return reference_count; } diff --git a/ACE/tests/Timer_Queue_Reference_Counting_Test.cpp b/ACE/tests/Timer_Queue_Reference_Counting_Test.cpp index 223681ccd20a4..c1e0925d2038e 100644 --- a/ACE/tests/Timer_Queue_Reference_Counting_Test.cpp +++ b/ACE/tests/Timer_Queue_Reference_Counting_Test.cpp @@ -70,7 +70,7 @@ Reference_Counted_Event_Handler::Reference_Counted_Event_Handler (int expected_n if (debug) ACE_DEBUG ((LM_DEBUG, "Reference count in Reference_Counted_Event_Handler() is %d\n", - this->reference_count_.value ())); + this->reference_count_.load ())); } Reference_Counted_Event_Handler::~Reference_Counted_Event_Handler (void) @@ -78,7 +78,7 @@ Reference_Counted_Event_Handler::~Reference_Counted_Event_Handler (void) if (debug) ACE_DEBUG ((LM_DEBUG, "Reference count in ~Reference_Counted_Event_Handler() is %d\n", - this->reference_count_.value ())); + this->reference_count_.load ())); if (this->expected_number_of_handle_close_calls_ != -1) ACE_TEST_ASSERT (this->number_of_handle_close_calls_ == @@ -93,7 +93,7 @@ Reference_Counted_Event_Handler::handle_timeout (const ACE_Time_Value &, ACE_DEBUG ((LM_DEBUG, "Reference count in Reference_Counted_Event_Handler::handle_timeout() for arg = %C is %d\n", (const char *) arg, - this->reference_count_.value ())); + this->reference_count_.load ())); return 0; } @@ -108,7 +108,7 @@ Reference_Counted_Event_Handler::handle_close (ACE_HANDLE handle, "Reference count is %d\n", handle, masks, - this->reference_count_.value ())); + this->reference_count_.load ())); ++this->number_of_handle_close_calls_; diff --git a/ACE/tests/WFMO_Reactor_Test.cpp b/ACE/tests/WFMO_Reactor_Test.cpp index ee85fa70acb7a..e76d831ee6d75 100644 --- a/ACE/tests/WFMO_Reactor_Test.cpp +++ b/ACE/tests/WFMO_Reactor_Test.cpp @@ -37,7 +37,7 @@ Event_Handler::Event_Handler (ACE_Reactor &reactor) ACE_DEBUG ((LM_DEBUG, "Reference count in Event_Handler() is %d\n", - this->reference_count_.value ())); + this->reference_count_.load ())); this->reactor (&reactor); @@ -62,7 +62,7 @@ Event_Handler::~Event_Handler (void) { ACE_DEBUG ((LM_DEBUG, "Reference count in ~Event_Handler() is %d\n", - this->reference_count_.value ())); + this->reference_count_.load ())); ++number_of_closes; } From bdbaa87f8f660256a45421819a17f362a1d3528b Mon Sep 17 00:00:00 2001 From: Johnny Willemsen Date: Tue, 10 Nov 2020 13:11:16 +0100 Subject: [PATCH 4/4] Add include to get ACE_Guard * TAO/tao/GUIResource_Factory.cpp: --- TAO/tao/GUIResource_Factory.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/TAO/tao/GUIResource_Factory.cpp b/TAO/tao/GUIResource_Factory.cpp index 27f7a00886152..903f59995df91 100644 --- a/TAO/tao/GUIResource_Factory.cpp +++ b/TAO/tao/GUIResource_Factory.cpp @@ -1,5 +1,6 @@ #include "tao/GUIResource_Factory.h" #include "ace/Reactor.h" +#include "ace/Guard_T.h" #include "tao/debug.h" TAO_BEGIN_VERSIONED_NAMESPACE_DECL