summaryrefslogtreecommitdiff
path: root/ACE/ace/Message_Block_T.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/ace/Message_Block_T.cpp')
-rw-r--r--ACE/ace/Message_Block_T.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/ACE/ace/Message_Block_T.cpp b/ACE/ace/Message_Block_T.cpp
new file mode 100644
index 00000000000..c02fb7c0401
--- /dev/null
+++ b/ACE/ace/Message_Block_T.cpp
@@ -0,0 +1,54 @@
+// $Id$
+
+#ifndef ACE_MESSAGE_BLOCK_T_CPP
+#define ACE_MESSAGE_BLOCK_T_CPP
+
+#include "ace/Malloc_Base.h" /* Need ACE_Allocator */
+
+#if !defined (__ACE_INLINE__)
+#include "ace/Message_Block_T.inl"
+#endif /* __ACE_INLINE__ */
+
+#include "ace/os_include/os_errno.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+template<class L>
+ACE_Locked_Data_Block<L>::~ACE_Locked_Data_Block (void)
+{
+}
+
+template<class ACE_LOCK> ACE_Data_Block *
+ACE_Locked_Data_Block<ACE_LOCK>::clone_nocopy (ACE_Message_Block::Message_Flags mask,
+ size_t max_size) const
+{
+ ACE_TRACE ("ACE_Locked_Data_Block::clone_nocopy");
+
+ // You always want to clear this one to prevent memory leaks but you
+ // might add some others later.
+ const ACE_Message_Block::Message_Flags always_clear =
+ ACE_Message_Block::DONT_DELETE;
+
+ ACE_Locked_Data_Block<ACE_LOCK> *nb = 0;
+
+ ACE_NEW_MALLOC_RETURN (nb,
+ static_cast<ACE_Locked_Data_Block<ACE_LOCK>*> (
+ this->data_block_allocator ()->malloc (sizeof (ACE_Locked_Data_Block<ACE_LOCK>))),
+ ACE_Locked_Data_Block<ACE_LOCK> (
+ max_size == 0 ?
+ this->size () : max_size,
+ this->msg_type (),
+ 0,
+ this->allocator_strategy (),
+ this->flags (),
+ this->data_block_allocator ()),
+ 0);
+
+ // Set new flags minus the mask...
+ nb->clr_flags (mask | always_clear);
+ return nb;
+}
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+#endif /* ACE_MESSAGE_BLOCK_T_CPP */