summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Sohns <eriksohns@fastmail.net>2015-12-02 02:01:02 +0100
committerErik Sohns <eriksohns@fastmail.net>2015-12-02 02:01:02 +0100
commitaeb68c0179483af8fb44fedf88c94549aaff3210 (patch)
tree2c74934889c2b3b51b71df64602bd157704b5309
parent502c6fce4c245da42c885a1e85c5821de282a2d4 (diff)
downloadATCD-aeb68c0179483af8fb44fedf88c94549aaff3210.tar.gz
fixed an issue with (exported) template specializations (Win32)
-rw-r--r--ACE/ace/Condition_Recursive_Thread_Mutex.cpp26
-rw-r--r--ACE/ace/Condition_Recursive_Thread_Mutex.h15
-rw-r--r--ACE/ace/Condition_Recursive_Thread_Mutex.inl16
-rw-r--r--ACE/ace/Future.h2
-rw-r--r--ACE/ace/Timer_Queue_Adapters.h2
-rw-r--r--ACE/examples/APG/ThreadPools/Futures.cpp3
-rw-r--r--ACE/examples/Timer_Queue/Thread_Timer_Queue_Custom_Handler_Test.h1
-rw-r--r--ACE/examples/Timer_Queue/Thread_Timer_Queue_Test.cpp3
-rw-r--r--ACE/tests/Bug_2772_Regression_Test.cpp3
-rw-r--r--ACE/tests/Recursive_Condition_Bug_Test.cpp3
10 files changed, 53 insertions, 21 deletions
diff --git a/ACE/ace/Condition_Recursive_Thread_Mutex.cpp b/ACE/ace/Condition_Recursive_Thread_Mutex.cpp
index 2f68f8c8b36..4ffe00d1947 100644
--- a/ACE/ace/Condition_Recursive_Thread_Mutex.cpp
+++ b/ACE/ace/Condition_Recursive_Thread_Mutex.cpp
@@ -12,15 +12,15 @@
#if defined (ACE_HAS_THREADS)
+#if !defined (__ACE_INLINE__)
+#include "ace/Condition_Recursive_Thread_Mutex.inl"
+#endif /* __ACE_INLINE__ */
+
#include "ace/Log_Category.h"
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
-int
-ACE_Condition<ACE_Recursive_Thread_Mutex>::remove (void)
-{
- return ACE_OS::cond_destroy (&this->cond_);
-}
+ACE_ALLOC_HOOK_DEFINE (ACE_Condition<ACE_Recursive_Thread_Mutex>)
void
ACE_Condition<ACE_Recursive_Thread_Mutex>::dump (void) const
@@ -37,11 +37,6 @@ ACE_Condition<ACE_Recursive_Thread_Mutex>::dump (void) const
#endif /* ACE_HAS_DUMP */
}
-ACE_Condition<ACE_Recursive_Thread_Mutex>::~ACE_Condition (void)
-{
- this->remove ();
-}
-
ACE_Condition<ACE_Recursive_Thread_Mutex>::ACE_Condition (ACE_Recursive_Thread_Mutex &m)
: mutex_ (m)
{
@@ -60,6 +55,11 @@ ACE_Condition<ACE_Recursive_Thread_Mutex>::ACE_Condition (ACE_Recursive_Thread_M
ACE_TEXT ("ACE_Condition<ACE_Recursive_Thread_Mutex>::ACE_Condition<ACE_Recursive_Thread_Mutex>")));
}
+ACE_Condition<ACE_Recursive_Thread_Mutex>::~ACE_Condition (void)
+{
+ this->remove ();
+}
+
int
ACE_Condition<ACE_Recursive_Thread_Mutex>::wait (const ACE_Time_Value *abstime)
{
@@ -120,12 +120,6 @@ ACE_Condition<ACE_Recursive_Thread_Mutex>::broadcast (void)
return ACE_OS::cond_broadcast (&this->cond_);
}
-ACE_Recursive_Thread_Mutex &
-ACE_Condition<ACE_Recursive_Thread_Mutex>::mutex (void)
-{
- return this->mutex_;
-}
-
ACE_END_VERSIONED_NAMESPACE_DECL
#endif /* ACE_HAS_THREADS */
diff --git a/ACE/ace/Condition_Recursive_Thread_Mutex.h b/ACE/ace/Condition_Recursive_Thread_Mutex.h
index a7ce9944cc5..8061f3b3d63 100644
--- a/ACE/ace/Condition_Recursive_Thread_Mutex.h
+++ b/ACE/ace/Condition_Recursive_Thread_Mutex.h
@@ -23,12 +23,17 @@
#if !defined (ACE_HAS_THREADS)
# include "ace/Null_Condition.h"
#else /* ACE_HAS_THREADS */
+// ACE platform supports some form of threading.
+
#include "ace/Recursive_Thread_Mutex.h"
#include "ace/Condition_Attributes.h"
#include "ace/Condition_T.h"
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+class ACE_Time_Value;
+
+#if defined (ACE_BUILD_DLL)
/**
* @brief ACE_Condition template specialization written using
* @a ACE_Recursive_Thread_Mutex. This allows threads to block until
@@ -86,6 +91,9 @@ public:
/// Dump the state of an object.
void dump (void) const;
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
private:
// = Prevent assignment and copying.
@@ -101,11 +109,18 @@ private:
ACE_Recursive_Thread_Mutex &mutex_;
};
+#else
+extern template ACE_Export class ACE_Condition<ACE_Recursive_Thread_Mutex>;
+#endif
typedef ACE_Condition<ACE_Recursive_Thread_Mutex> ACE_Condition_Recursive_Thread_Mutex;
ACE_END_VERSIONED_NAMESPACE_DECL
+#if defined (__ACE_INLINE__)
+#include "ace/Condition_Recursive_Thread_Mutex.inl"
+#endif /* __ACE_INLINE__ */
+
#endif /* !ACE_HAS_THREADS */
#include /**/ "ace/post.h"
diff --git a/ACE/ace/Condition_Recursive_Thread_Mutex.inl b/ACE/ace/Condition_Recursive_Thread_Mutex.inl
new file mode 100644
index 00000000000..44e4e09c3a7
--- /dev/null
+++ b/ACE/ace/Condition_Recursive_Thread_Mutex.inl
@@ -0,0 +1,16 @@
+// -*- C++ -*-
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE int
+ACE_Condition<ACE_Recursive_Thread_Mutex>::remove (void)
+{
+ return ACE_OS::cond_destroy (&this->cond_);
+}
+
+ACE_INLINE ACE_Recursive_Thread_Mutex &
+ACE_Condition<ACE_Recursive_Thread_Mutex>::mutex (void)
+{
+ return this->mutex_;
+}
+
+ACE_END_VERSIONED_NAMESPACE_DECL
diff --git a/ACE/ace/Future.h b/ACE/ace/Future.h
index c83fae41a47..1ed39ab50fe 100644
--- a/ACE/ace/Future.h
+++ b/ACE/ace/Future.h
@@ -26,8 +26,6 @@
#if defined (ACE_HAS_THREADS)
#include "ace/Synch_Traits.h"
-#include "ace/Recursive_Thread_Mutex.h"
-#include "ace/Condition_Recursive_Thread_Mutex.h"
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
diff --git a/ACE/ace/Timer_Queue_Adapters.h b/ACE/ace/Timer_Queue_Adapters.h
index a92a260cd2f..4704de6d4e9 100644
--- a/ACE/ace/Timer_Queue_Adapters.h
+++ b/ACE/ace/Timer_Queue_Adapters.h
@@ -21,7 +21,7 @@
#include "ace/Signal.h"
#include "ace/Sig_Handler.h"
-#include "ace/Condition_Recursive_Thread_Mutex.h"
+#include "ace/Synch_Traits.h"
#if defined (ACE_HAS_DEFERRED_TIMER_COMMANDS)
# include "ace/Unbounded_Queue.h"
diff --git a/ACE/examples/APG/ThreadPools/Futures.cpp b/ACE/examples/APG/ThreadPools/Futures.cpp
index c207c734828..1ba64792262 100644
--- a/ACE/examples/APG/ThreadPools/Futures.cpp
+++ b/ACE/examples/APG/ThreadPools/Futures.cpp
@@ -12,6 +12,9 @@
#include "ace/Activation_Queue.h"
#include "ace/Condition_T.h"
+// *NOTE*: explicit template instantiation required here...
+template class ACE_Condition<ACE_Recursive_Thread_Mutex>;
+
#define OUTSTANDING_REQUESTS 20
// Listing 2 code/ch16
diff --git a/ACE/examples/Timer_Queue/Thread_Timer_Queue_Custom_Handler_Test.h b/ACE/examples/Timer_Queue/Thread_Timer_Queue_Custom_Handler_Test.h
index 5ccb0e01bff..a412ac358cf 100644
--- a/ACE/examples/Timer_Queue/Thread_Timer_Queue_Custom_Handler_Test.h
+++ b/ACE/examples/Timer_Queue/Thread_Timer_Queue_Custom_Handler_Test.h
@@ -26,7 +26,6 @@
#include "ace/Timer_Heap_T.h"
#include "ace/Timer_Queue_Adapters.h"
#include "ace/svc_export.h"
-#include "ace/Condition_Recursive_Thread_Mutex.h"
#include "Driver.h"
#include "Custom_Handler.h"
diff --git a/ACE/examples/Timer_Queue/Thread_Timer_Queue_Test.cpp b/ACE/examples/Timer_Queue/Thread_Timer_Queue_Test.cpp
index 03471912ad9..d46c084d690 100644
--- a/ACE/examples/Timer_Queue/Thread_Timer_Queue_Test.cpp
+++ b/ACE/examples/Timer_Queue/Thread_Timer_Queue_Test.cpp
@@ -22,7 +22,8 @@
#include "ace/Condition_T.h"
#include "ace/Thread_Mutex.h"
-
+// *NOTE*: explicit template instantiation required here...
+template class ACE_Condition<ACE_Recursive_Thread_Mutex>;
// Administrivia methods...
Handler::Handler(const ACE_Time_Value &expiration_time)
diff --git a/ACE/tests/Bug_2772_Regression_Test.cpp b/ACE/tests/Bug_2772_Regression_Test.cpp
index 14c948de6d7..f2a98427128 100644
--- a/ACE/tests/Bug_2772_Regression_Test.cpp
+++ b/ACE/tests/Bug_2772_Regression_Test.cpp
@@ -16,6 +16,9 @@
#include "ace/Condition_Recursive_Thread_Mutex.h"
#include "ace/Thread.h"
+// *NOTE*: explicit template instantiation required here...
+template class ACE_Condition<ACE_Recursive_Thread_Mutex>;
+
class ThreadTest
{
public:
diff --git a/ACE/tests/Recursive_Condition_Bug_Test.cpp b/ACE/tests/Recursive_Condition_Bug_Test.cpp
index 365c80209ed..1513b583c5e 100644
--- a/ACE/tests/Recursive_Condition_Bug_Test.cpp
+++ b/ACE/tests/Recursive_Condition_Bug_Test.cpp
@@ -23,6 +23,9 @@
#include "ace/Timer_Queue_Adapters.h"
#include "ace/Condition_Recursive_Thread_Mutex.h"
+// *NOTE*: explicit template instantiation required here...
+template class ACE_Condition<ACE_Recursive_Thread_Mutex>;
+
#if defined (ACE_HAS_THREADS)
// Number of iterations for the performance tests.