diff options
author | labancap <labancap@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2013-01-31 22:43:05 +0000 |
---|---|---|
committer | labancap <labancap@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2013-01-31 22:43:05 +0000 |
commit | ac24d95ef8c14c5a6f692e51d4180ed248fa80dc (patch) | |
tree | 0e4fa165dfc1b75e1c7fdc7712d550272e3d5e8e | |
parent | eead2ef25c54a58d7adee69cabfbd6c37d40a71d (diff) | |
download | ATCD-ac24d95ef8c14c5a6f692e51d4180ed248fa80dc.tar.gz |
Fixed problem with allocator in clone and duplicate
-rw-r--r-- | ACE/OCI_RE_ChangeLog | 10 | ||||
-rw-r--r-- | ACE/ace/Message_Block.cpp | 6 | ||||
-rw-r--r-- | ACE/tests/Message_Block_Large_Copy_Test.cpp | 19 |
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; } - |