summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlabancap <labancap@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2013-01-31 22:43:05 +0000
committerlabancap <labancap@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2013-01-31 22:43:05 +0000
commitac24d95ef8c14c5a6f692e51d4180ed248fa80dc (patch)
tree0e4fa165dfc1b75e1c7fdc7712d550272e3d5e8e
parenteead2ef25c54a58d7adee69cabfbd6c37d40a71d (diff)
downloadATCD-ac24d95ef8c14c5a6f692e51d4180ed248fa80dc.tar.gz
Fixed problem with allocator in clone and duplicate
-rw-r--r--ACE/OCI_RE_ChangeLog10
-rw-r--r--ACE/ace/Message_Block.cpp6
-rw-r--r--ACE/tests/Message_Block_Large_Copy_Test.cpp19
3 files changed, 30 insertions, 5 deletions
diff --git a/ACE/OCI_RE_ChangeLog b/ACE/OCI_RE_ChangeLog
index 40dc0ea90bd..1b36813ade6 100644
--- a/ACE/OCI_RE_ChangeLog
+++ b/ACE/OCI_RE_ChangeLog
@@ -1,3 +1,13 @@
+Thu Jan 31 22:39:53 UTC 2013 Phillip LaBanca <labancap@ociweb.com>
+
+ * ace/Message_Block.cpp:
+
+ Fixed problem with allocator in clone and duplicate
+
+ * tests/Message_Block_Large_Copy_Test.cpp:
+
+ Added reference count output
+
Thu Jan 31 18:41:26 UTC 2013 Phillip LaBanca <labancap@ociweb.com>
* tests/Message_Block_Large_Copy_Test.cpp:
diff --git a/ACE/ace/Message_Block.cpp b/ACE/ace/Message_Block.cpp
index f97a8d754f1..d4ad6ad4488 100644
--- a/ACE/ace/Message_Block.cpp
+++ b/ACE/ace/Message_Block.cpp
@@ -1053,7 +1053,7 @@ ACE_Message_Block::duplicate (void) const
else // Otherwise, use the message_block_allocator passed in.
ACE_NEW_MALLOC_NORETURN (cur_dup,
static_cast<ACE_Message_Block*> (
- message_block_allocator_->malloc (sizeof (ACE_Message_Block))),
+ current->message_block_allocator_->malloc (sizeof (ACE_Message_Block))),
ACE_Message_Block (0, // size
ACE_Message_Type (0), // type
0, // cont
@@ -1087,7 +1087,7 @@ ACE_Message_Block::duplicate (void) const
cur_dup->rd_ptr (current->rd_ptr_);
cur_dup->wr_ptr (current->wr_ptr_);
- if(!nb)
+ if (!nb)
{
/* First in the list: set leading pointers */
nb_top = nb = cur_dup;
@@ -1231,7 +1231,7 @@ ACE_Message_Block::clone (Message_Flags mask) const
// the cloned data block that was created above. If we used
// ACE_NEW_MALLOC_RETURN, there would be a memory leak because the
// above db pointer would be left dangling.
- new_message_block = static_cast<ACE_Message_Block*> (message_block_allocator_->malloc (sizeof (ACE_Message_Block)));
+ new_message_block = static_cast<ACE_Message_Block*> (old_message_block->message_block_allocator_->malloc (sizeof (ACE_Message_Block)));
if (new_message_block != 0)
new (new_message_block) ACE_Message_Block (0, // size
ACE_Message_Type (0), // type
diff --git a/ACE/tests/Message_Block_Large_Copy_Test.cpp b/ACE/tests/Message_Block_Large_Copy_Test.cpp
index a600271273e..062ddb34017 100644
--- a/ACE/tests/Message_Block_Large_Copy_Test.cpp
+++ b/ACE/tests/Message_Block_Large_Copy_Test.cpp
@@ -39,13 +39,21 @@ run_duplicate_test (const size_t msg_block_count,
{
rc = mb_test->total_size();
ACE_ERROR ((LM_DEBUG,
+ ACE_TEXT ("(%P|%t) %u top reference_count ()\n"),
+ mb_top->reference_count ()));
+ ACE_ERROR ((LM_DEBUG,
ACE_TEXT ("(%P|%t) duplicated: %@ %d %d\n"),
mb_test,
mb_test->total_size(),
mb_test->total_length()));
mb_test-> release();
}
- mb_top-> release();
+
+ ACE_ERROR ((LM_DEBUG,
+ ACE_TEXT ("(%P|%t) %u top reference_count ()\n"),
+ mb_top->reference_count ()));
+
+ mb_top-> release ();
return rc;
}
@@ -72,12 +80,20 @@ run_clone_test (const size_t msg_block_count,
{
rc = mb_test->total_size();
ACE_ERROR ((LM_DEBUG,
+ ACE_TEXT ("(%P|%t) %u top reference_count ()\n"),
+ mb_top->reference_count ()));
+ ACE_ERROR ((LM_DEBUG,
ACE_TEXT ("(%P|%t) cloned: %@ %d %d\n"),
mb_test,
mb_test->total_size(),
mb_test->total_length()));
mb_test-> release();
}
+
+ ACE_ERROR ((LM_DEBUG,
+ ACE_TEXT ("(%P|%t) %u top reference_count ()\n"),
+ mb_top->reference_count ()));
+
mb_top-> release();
return rc;
}
@@ -135,4 +151,3 @@ run_main (int , ACE_TCHAR *[])
ACE_END_TEST;
return rc;
}
-