diff options
Diffstat (limited to 'examples/Shared_Malloc/test_position_independent_malloc.cpp')
-rw-r--r-- | examples/Shared_Malloc/test_position_independent_malloc.cpp | 211 |
1 files changed, 0 insertions, 211 deletions
diff --git a/examples/Shared_Malloc/test_position_independent_malloc.cpp b/examples/Shared_Malloc/test_position_independent_malloc.cpp deleted file mode 100644 index 3203b700601..00000000000 --- a/examples/Shared_Malloc/test_position_independent_malloc.cpp +++ /dev/null @@ -1,211 +0,0 @@ -// $Id$ - -// Test the capability of the "position-independent" <ACE_Malloc> to -// handle a single malloc that can be rooted at different base -// addresses each time it's used. The actual backing store used by -// <ACE_Malloc> is located in a memory-mapped file. - -#include "test_position_independent_malloc.h" -#include "ace/PI_Malloc.h" -#include "ace/Based_Pointer_T.h" -#include "ace/Get_Opt.h" -#include "ace/Synch.h" -#include "ace/Auto_Ptr.h" -#include "ace/Process_Mutex.h" - -ACE_RCSID(Shared_Malloc, test_multiple_mallocs, "$Id$") - -#if (ACE_HAS_POSITION_INDEPENDENT_POINTERS == 1) -typedef ACE_PI_Control_Block CONTROL_BLOCK; -#else -typedef ACE_Control_Block CONTROL_BLOCK; -#endif /* ACE_HAS_POSITION_INDEPENDENT_POINTERS == 1 */ - -typedef ACE_Malloc_T <ACE_MMAP_MEMORY_POOL, ACE_Process_Mutex, CONTROL_BLOCK> TEST_MALLOC; - -// Default address for memory-mapped files. -static void *base_addr = ACE_DEFAULT_BASE_ADDR; - -static void -print (Test_Data *data) -{ - for (Test_Data *t = data; t != 0; t = t->next_) - { - ACE_DEBUG ((LM_DEBUG, - "<<<<\ni1_ = %d, i2_ = %d, i3_ = %d\n", - t->i1_, - t->i2_, - t->i3_)); - ACE_DEBUG ((LM_DEBUG, - "*t->bpl_ = %d, t->long_test_->array_[0] = %d\n>>>>\n", - *t->long_test_->bpl_, - t->long_test_->array_[0])); - } -} - -static void * -initialize (TEST_MALLOC *allocator) -{ - void *ptr; - ACE_ALLOCATOR_RETURN (ptr, - allocator->malloc (sizeof (Test_Data)), - 0); - Test_Data *data1 = new (ptr) Test_Data; - - data1->i1_ = 111; - data1->i2_ = 222; - data1->i3_ = 333; - - void *gap = 0; - ACE_ALLOCATOR_RETURN (gap, - allocator->malloc (sizeof (256)), - 0); - - allocator->free (gap); - - ACE_ALLOCATOR_RETURN (ptr, - allocator->malloc (sizeof (Test_Data)), - 0); - Test_Data *data2 = new (ptr) Test_Data; - - data1->next_ = 0; - data1->i1_ = 111; - data1->i2_ = 222; - data1->i3_ = 333; - data2->next_ = data1; - data2->i1_ = -111; - data2->i2_ = -222; - data2->i3_ = -333; - - // Test in shared memory using long (array/pointer) - ACE_ALLOCATOR_RETURN (ptr, - allocator->malloc (sizeof (Long_Test)), - 0); - Long_Test *lt = new (ptr) Long_Test; - - lt->array_[0] = 1000; - lt->array_[1] = 1001; - lt->array_[2] = 1002; - lt->array_[3] = 1003; - lt->array_[4] = 1004; - lt->bpl_ = lt->array_; - - data1->long_test_= lt; - - ACE_ASSERT (*lt->bpl_ == 1000); - ACE_ASSERT (lt->bpl_[3] == 1003); - - ACE_ALLOCATOR_RETURN (ptr, - allocator->malloc (sizeof (Long_Test)), - 0); - lt = new (ptr) Long_Test; - - lt->array_[0] = 2000; - lt->array_[1] = 2001; - lt->array_[2] = 2002; - lt->array_[3] = 2003; - lt->array_[4] = 2004; - lt->bpl_ = lt->array_; - - data2->long_test_= lt; - - ACE_ASSERT (*lt->bpl_ == 2000); - ACE_ASSERT (lt->bpl_[4] == 2004); - - return data2; -} - -static void -parse_args (int argc, char *argv[]) -{ - ACE_Get_Opt get_opt (argc, argv, "a:T"); - - for (int c; - (c = get_opt ()) != -1; - ) - { - switch (c) - { - case 'a': - // Override the default base address. - base_addr = ACE_reinterpret_cast (void *, - ACE_OS::atoi (get_opt.optarg)); - break; - case 'T': - ACE_Trace::start_tracing (); - break; - } - } -} - -int -main (int argc, char *argv[]) -{ - parse_args (argc, argv); - - ACE_MMAP_Memory_Pool_Options options (base_addr); - - // Create an allocator. - TEST_MALLOC *ptr; - ACE_NEW_RETURN (ptr, - TEST_MALLOC ("test_file", - "test_lock", - &options), - 1); - auto_ptr <TEST_MALLOC> allocator (ptr); - void *data = 0; - - // This is the first time in, so we allocate the memory and bind it - // to the name "foo". - if (allocator->find ("foo", - data) == -1) - { - data = initialize (allocator.get ()); - - if (allocator->bind ("foo", - data) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - "%p\n", - "bind"), - 1); - - ACE_DEBUG ((LM_DEBUG, - "Run again to see results and release resources.\n")); - } - // If we find "foo" then we're running the "second" time, so we must - // release the resources. - else - { - print ((Test_Data *) data); - allocator->free (data); - allocator->remove (); - ACE_DEBUG ((LM_DEBUG, - "all resources released\n")); - } - - return 0; -} - -#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) -template class ACE_Based_Pointer<Test_Data>; -template class ACE_Based_Pointer_Basic<Test_Data>; -template class ACE_Based_Pointer_Basic<long>; -template class ACE_Based_Pointer_Basic<Long_Test>; -template class ACE_Based_Pointer<Long_Test>; -template class auto_ptr <TEST_MALLOC>; -template class ACE_Auto_Basic_Ptr<TEST_MALLOC>; -#if (ACE_HAS_POSITION_INDEPENDENT_POINTERS == 1) - -#endif /* ACE_HAS_POSITION_INDEPENDENT_POINTERS == 1 */ -#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) -#pragma instantiate ACE_Based_Pointer<Test_Data> -#pragma instantiate ACE_Based_Pointer_Basic<Test_Data> -#pragma instantiate ACE_Based_Pointer_Basic<long> -#pragma instantiate ACE_Based_Pointer_Basic<Long_Test> -#pragma instantiate ACE_Based_Pointer_Basic<Long> -#pragma instantiate auto_ptr <TEST_MALLOC> -#pragma instantiate ACE_Auto_Basic_Ptr<TEST_MALLOC> -#if (ACE_HAS_POSITION_INDEPENDENT_POINTERS == 1) - -#endif /* ACE_HAS_POSITION_INDEPENDENT_POINTERS == 1 */ -#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ |