From 95861ad94320fbee247db8fe2bf2eb98b72c218d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Thu, 16 Apr 2009 07:05:08 +0000 Subject: [PATCH] Fixed C++0x and MacOS X bugs [SVN r52416] --- doc/interprocess.qbk | 15 +++++++++++--- example/doc_adaptive_pool.cpp | 20 ++++++++++++++++++ example/doc_allocator.cpp | 20 ++++++++++++++++++ example/doc_bufferstream.cpp | 20 ++++++++++++++++++ example/doc_cached_adaptive_pool.cpp | 20 ++++++++++++++++++ example/doc_cached_node_allocator.cpp | 20 ++++++++++++++++++ example/doc_cont.cpp | 20 ++++++++++++++++++ example/doc_intrusive.cpp | 20 ++++++++++++++++++ example/doc_ipc_message.cpp | 2 +- example/doc_managed_aligned_allocation.cpp | 20 ++++++++++++++++++ example/doc_managed_allocation_command.cpp | 20 ++++++++++++++++++ example/doc_managed_construction_info.cpp | 20 ++++++++++++++++++ example/doc_managed_multiple_allocation.cpp | 23 +++++++++++++++++++-- example/doc_managed_raw_allocation.cpp | 22 +++++++++++++++++++- example/doc_map.cpp | 20 ++++++++++++++++++ example/doc_move_containers.cpp | 20 ++++++++++++++++++ example/doc_spawn_vector.cpp | 2 +- example/doc_windows_shared_memory.cpp | 3 +++ 18 files changed, 299 insertions(+), 8 deletions(-) diff --git a/doc/interprocess.qbk b/doc/interprocess.qbk index fce5e85..3123486 100644 --- a/doc/interprocess.qbk +++ b/doc/interprocess.qbk @@ -3058,7 +3058,11 @@ To use a managed shared memory, you must include the following header: // to implement managed features. //!! If anything fails, throws interprocess_exception // - managed_shared_memory segment (create_only, "MySharedMemory", //Shared memory object name 65536); //Shared memory object size in bytes + managed_shared_memory segment ( create_only + , "MySharedMemory" //Shared memory object name + , 65536); //Shared memory object size in bytes + + [c++] //1. Opens a shared memory object @@ -3069,7 +3073,8 @@ To use a managed shared memory, you must include the following header: // to implement managed features. //!! If anything fails, throws interprocess_exception // - managed_shared_memory segment (open_only, "MySharedMemory");//Shared memory object name[c++] + managed_shared_memory segment (open_only, "MySharedMemory");//Shared memory object name + [c++] @@ -3078,7 +3083,11 @@ To use a managed shared memory, you must include the following header: //2. Otherwise, equivalent to "open_only" (size is ignored) //!! If anything fails, throws interprocess_exception // - managed_shared_memory segment (open_or_create, "MySharedMemory", //Shared memory object name 65536); //Shared memory object size in bytes + managed_shared_memory segment ( open_or_create + , "MySharedMemory" //Shared memory object name + , 65536); //Shared memory object size in bytes + + When the `managed_shared_memory` object is destroyed, the shared memory object is automatically unmapped, and all the resources are freed. To remove the shared memory object from the system you must use the `shared_memory_object::remove` diff --git a/example/doc_adaptive_pool.cpp b/example/doc_adaptive_pool.cpp index 13fff37..a074173 100644 --- a/example/doc_adaptive_pool.cpp +++ b/example/doc_adaptive_pool.cpp @@ -13,6 +13,9 @@ #include #include #include +//<- +#include "../test/get_process_id_name.hpp" +//-> using namespace boost::interprocess; @@ -21,14 +24,31 @@ int main () //Remove shared memory on construction and destruction struct shm_remove { + //<- + #if 1 + shm_remove() { shared_memory_object::remove(test::get_process_id_name()); } + ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); } + #else + //-> shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } + //<- + #endif + //-> } remover; //Create shared memory + //<- + #if 1 + managed_shared_memory segment(create_only,test::get_process_id_name(), 65536); + #else + //-> managed_shared_memory segment(create_only, "MySharedMemory", //segment name 65536); + //<- + #endif + //-> //Create a adaptive_pool that allocates ints from the managed segment //The number of chunks per segment is the default value diff --git a/example/doc_allocator.cpp b/example/doc_allocator.cpp index 62aed8c..6a67936 100644 --- a/example/doc_allocator.cpp +++ b/example/doc_allocator.cpp @@ -13,6 +13,9 @@ #include #include #include +//<- +#include "../test/get_process_id_name.hpp" +//-> using namespace boost::interprocess; @@ -21,14 +24,31 @@ int main () //Remove shared memory on construction and destruction struct shm_remove { + //<- + #if 1 + shm_remove() { shared_memory_object::remove(test::get_process_id_name()); } + ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); } + #else + //-> shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } + //<- + #endif + //-> } remover; //Create shared memory + //<- + #if 1 + managed_shared_memory segment(create_only,test::get_process_id_name(), 65536); + #else + //-> managed_shared_memory segment(create_only, "MySharedMemory", //segment name 65536); + //<- + #endif + //-> //Create an allocator that allocates ints from the managed segment allocator diff --git a/example/doc_bufferstream.cpp b/example/doc_bufferstream.cpp index 179b4c9..e28c6a4 100644 --- a/example/doc_bufferstream.cpp +++ b/example/doc_bufferstream.cpp @@ -15,6 +15,9 @@ #include #include #include +//<- +#include "../test/get_process_id_name.hpp" +//-> using namespace boost::interprocess; @@ -23,14 +26,31 @@ int main () //Remove shared memory on construction and destruction struct shm_remove { + //<- + #if 1 + shm_remove() { shared_memory_object::remove(test::get_process_id_name()); } + ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); } + #else + //-> shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } + //<- + #endif + //-> } remover; //Create shared memory + //<- + #if 1 + managed_shared_memory segment(create_only,test::get_process_id_name(), 65536); + #else + //-> managed_shared_memory segment(create_only, "MySharedMemory", //segment name 65536); + //<- + #endif + //-> //Fill data std::vector data; diff --git a/example/doc_cached_adaptive_pool.cpp b/example/doc_cached_adaptive_pool.cpp index d51923c..bc802ad 100644 --- a/example/doc_cached_adaptive_pool.cpp +++ b/example/doc_cached_adaptive_pool.cpp @@ -13,6 +13,9 @@ #include #include #include +//<- +#include "../test/get_process_id_name.hpp" +//-> using namespace boost::interprocess; @@ -21,14 +24,31 @@ int main () //Remove shared memory on construction and destruction struct shm_remove { + //<- + #if 1 + shm_remove() { shared_memory_object::remove(test::get_process_id_name()); } + ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); } + #else + //-> shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } + //<- + #endif + //-> } remover; //Create shared memory + //<- + #if 1 + managed_shared_memory segment(create_only,test::get_process_id_name(), 65536); + #else + //-> managed_shared_memory segment(create_only, "MySharedMemory", //segment name 65536); + //<- + #endif + //-> //Create a cached_adaptive_pool that allocates ints from the managed segment //The number of chunks per segment is the default value diff --git a/example/doc_cached_node_allocator.cpp b/example/doc_cached_node_allocator.cpp index 016931e..f88f9e1 100644 --- a/example/doc_cached_node_allocator.cpp +++ b/example/doc_cached_node_allocator.cpp @@ -13,6 +13,9 @@ #include #include #include +//<- +#include "../test/get_process_id_name.hpp" +//-> using namespace boost::interprocess; @@ -21,14 +24,31 @@ int main () //Remove shared memory on construction and destruction struct shm_remove { + //<- + #if 1 + shm_remove() { shared_memory_object::remove(test::get_process_id_name()); } + ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); } + #else + //-> shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } + //<- + #endif + //-> } remover; //Create shared memory + //<- + #if 1 + managed_shared_memory segment(create_only, test::get_process_id_name(), 65536); + #else + //-> managed_shared_memory segment(create_only, "MySharedMemory", //segment name 65536); + //<- + #endif + //-> //Create a cached_node_allocator that allocates ints from the managed segment //The number of chunks per segment is the default value diff --git a/example/doc_cont.cpp b/example/doc_cont.cpp index df0db4c..1cd4d97 100644 --- a/example/doc_cont.cpp +++ b/example/doc_cont.cpp @@ -13,6 +13,9 @@ #include #include #include +//<- +#include "../test/get_process_id_name.hpp" +//-> int main () { @@ -20,15 +23,32 @@ int main () //Remove shared memory on construction and destruction struct shm_remove { + //<- + #if 1 + shm_remove() { shared_memory_object::remove(test::get_process_id_name()); } + ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); } + #else + //-> shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } + //<- + #endif + //-> } remover; //A managed shared memory where we can construct objects //associated with a c-string + //<- + #if 1 + managed_shared_memory segment(create_only,test::get_process_id_name(), 65536); + #else + //-> managed_shared_memory segment(create_only, "MySharedMemory", //segment name 65536); + //<- + #endif + //-> //Alias an STL-like allocator of ints that allocates ints from the segment typedef allocator diff --git a/example/doc_intrusive.cpp b/example/doc_intrusive.cpp index 4a4eab6..d24bf41 100644 --- a/example/doc_intrusive.cpp +++ b/example/doc_intrusive.cpp @@ -13,6 +13,9 @@ //[doc_intrusive #include #include +//<- +#include "../test/get_process_id_name.hpp" +//-> using namespace boost::interprocess; @@ -74,12 +77,29 @@ int main() //Remove shared memory on construction and destruction struct shm_remove { + //<- + #if 1 + shm_remove() { shared_memory_object::remove(test::get_process_id_name()); } + ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); } + #else + //-> shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } + //<- + #endif + //-> } remover; //Create shared memory + //<- + #if 1 + managed_shared_memory shmem(create_only, test::get_process_id_name(), 10000); + #else + //-> managed_shared_memory shmem(create_only, "MySharedMemory", 10000); + //<- + #endif + //-> //Create the unique reference counted object in shared memory N::reference_counted_class *ref_counted = diff --git a/example/doc_ipc_message.cpp b/example/doc_ipc_message.cpp index 1233e1d..77d3fd4 100644 --- a/example/doc_ipc_message.cpp +++ b/example/doc_ipc_message.cpp @@ -9,7 +9,7 @@ ////////////////////////////////////////////////////////////////////////////// #include #include -//[run_ipc_message +//[doc_ipc_message #include #include //std::system #include diff --git a/example/doc_managed_aligned_allocation.cpp b/example/doc_managed_aligned_allocation.cpp index f7cd1b5..2ad8115 100644 --- a/example/doc_managed_aligned_allocation.cpp +++ b/example/doc_managed_aligned_allocation.cpp @@ -11,6 +11,9 @@ //[doc_managed_aligned_allocation #include #include +//<- +#include "../test/get_process_id_name.hpp" +//-> int main() { @@ -19,13 +22,30 @@ int main() //Remove shared memory on construction and destruction struct shm_remove { + //<- + #if 1 + shm_remove() { shared_memory_object::remove(test::get_process_id_name()); } + ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); } + #else + //-> shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } + //<- + #endif + //-> } remover; //Managed memory segment that allocates portions of a shared memory //segment with the default management algorithm + //<- + #if 1 + managed_shared_memory managed_shm(create_only, test::get_process_id_name(), 65536); + #else + //-> managed_shared_memory managed_shm(create_only, "MySharedMemory", 65536); + //<- + #endif + //-> const std::size_t Alignment = 128; diff --git a/example/doc_managed_allocation_command.cpp b/example/doc_managed_allocation_command.cpp index a90790b..47fe41e 100644 --- a/example/doc_managed_allocation_command.cpp +++ b/example/doc_managed_allocation_command.cpp @@ -11,6 +11,9 @@ //[doc_managed_allocation_command #include #include +//<- +#include "../test/get_process_id_name.hpp" +//-> int main() { @@ -19,13 +22,30 @@ int main() //Remove shared memory on construction and destruction struct shm_remove { + //<- + #if 1 + shm_remove() { shared_memory_object::remove(test::get_process_id_name()); } + ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); } + #else + //-> shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } + //<- + #endif + //-> } remover; //Managed memory segment that allocates portions of a shared memory //segment with the default management algorithm + //<- + #if 1 + managed_shared_memory managed_shm(create_only, test::get_process_id_name(), 10000*sizeof(std::size_t)); + #else + //-> managed_shared_memory managed_shm(create_only, "MySharedMemory", 10000*sizeof(std::size_t)); + //<- + #endif + //-> //Allocate at least 100 bytes, 1000 bytes if possible std::size_t received_size, min_size = 100, preferred_size = 1000; diff --git a/example/doc_managed_construction_info.cpp b/example/doc_managed_construction_info.cpp index 874e1f7..b6bc286 100644 --- a/example/doc_managed_construction_info.cpp +++ b/example/doc_managed_construction_info.cpp @@ -12,6 +12,9 @@ #include #include #include +//<- +#include "../test/get_process_id_name.hpp" +//-> class my_class { @@ -25,11 +28,28 @@ int main() //Remove shared memory on construction and destruction struct shm_remove { + //<- + #if 1 + shm_remove() { shared_memory_object::remove(test::get_process_id_name()); } + ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); } + #else + //-> shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } + //<- + #endif + //-> } remover; + //<- + #if 1 + managed_shared_memory managed_shm(create_only, test::get_process_id_name(), 10000*sizeof(std::size_t)); + #else + //-> managed_shared_memory managed_shm(create_only, "MySharedMemory", 10000*sizeof(std::size_t)); + //<- + #endif + //-> //Construct objects my_class *named_object = managed_shm.construct("Object name")[1](); diff --git a/example/doc_managed_multiple_allocation.cpp b/example/doc_managed_multiple_allocation.cpp index 46885db..e512379 100644 --- a/example/doc_managed_multiple_allocation.cpp +++ b/example/doc_managed_multiple_allocation.cpp @@ -15,7 +15,9 @@ #include //std::memset #include //std::nothrow #include //std::vector - +//<- +#include "../test/get_process_id_name.hpp" +//-> int main() { @@ -25,11 +27,28 @@ int main() //Remove shared memory on construction and destruction struct shm_remove { + //<- + #if 1 + shm_remove() { shared_memory_object::remove(test::get_process_id_name()); } + ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); } + #else + //-> shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } + //<- + #endif + //-> } remover; - managed_shared_memory managed_shm(create_only, "MySharedMemory", 65536); + //<- + #if 1 + managed_shared_memory managed_shm(create_only,test::get_process_id_name(), 65536); + #else + //-> + managed_shared_memory managed_shm(create_only,"MySharedMemory", 65536); + //<- + #endif + //-> //Allocate 16 elements of 100 bytes in a single call. Non-throwing version. multiallocation_chain chain(managed_shm.allocate_many(100, 16, std::nothrow)); diff --git a/example/doc_managed_raw_allocation.cpp b/example/doc_managed_raw_allocation.cpp index 3207954..6f2f557 100644 --- a/example/doc_managed_raw_allocation.cpp +++ b/example/doc_managed_raw_allocation.cpp @@ -10,6 +10,9 @@ #include //[doc_managed_raw_allocation #include +//<- +#include "../test/get_process_id_name.hpp" +//-> int main() { @@ -18,13 +21,30 @@ int main() //Remove shared memory on construction and destruction struct shm_remove { + //<- + #if 1 + shm_remove() { shared_memory_object::remove(test::get_process_id_name()); } + ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); } + #else + //-> shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } + //<- + #endif + //-> } remover; //Managed memory segment that allocates portions of a shared memory //segment with the default management algorithm - managed_shared_memory managed_shm(create_only, "MySharedMemory", 65536); + //<- + #if 1 + managed_shared_memory managed_shm(create_only,test::get_process_id_name(), 65536); + #else + //-> + managed_shared_memory managed_shm(create_only,"MySharedMemory", 65536); + //<- + #endif + //-> //Allocate 100 bytes of memory from segment, throwing version void *ptr = managed_shm.allocate(100); diff --git a/example/doc_map.cpp b/example/doc_map.cpp index a404e12..0d5d9d7 100644 --- a/example/doc_map.cpp +++ b/example/doc_map.cpp @@ -15,6 +15,9 @@ #include #include #include +//<- +#include "../test/get_process_id_name.hpp" +//-> int main () { @@ -23,17 +26,34 @@ int main () //Remove shared memory on construction and destruction struct shm_remove { + //<- + #if 1 + shm_remove() { shared_memory_object::remove(test::get_process_id_name()); } + ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); } + #else + //-> shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } + //<- + #endif + //-> } remover; //Shared memory front-end that is able to construct objects //associated with a c-string. Erase previous shared memory with the name //to be used and create the memory segment at the specified address and initialize resources + //<- + #if 1 + managed_shared_memory segment(create_only,test::get_process_id_name(), 65536); + #else + //-> managed_shared_memory segment (create_only ,"MySharedMemory" //segment name ,65536); //segment size in bytes + //<- + #endif + //-> //Note that map's value_type is std::pair, //so the allocator must allocate that pair. diff --git a/example/doc_move_containers.cpp b/example/doc_move_containers.cpp index b0b6b0b..084f733 100644 --- a/example/doc_move_containers.cpp +++ b/example/doc_move_containers.cpp @@ -15,6 +15,9 @@ #include #include #include +//<- +#include "../test/get_process_id_name.hpp" +//-> int main () { @@ -31,11 +34,28 @@ int main () //Remove shared memory on construction and destruction struct shm_remove { + //<- + #if 1 + shm_remove() { shared_memory_object::remove(test::get_process_id_name()); } + ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); } + #else + //-> shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } + //<- + #endif + //-> } remover; + //<- + #if 1 + managed_shared_memory shm(create_only, test::get_process_id_name(), 65536); + #else + //-> managed_shared_memory shm(create_only, "MySharedMemory", 10000); + //<- + #endif + //-> //Create allocators CharAllocator charallocator (shm.get_segment_manager()); diff --git a/example/doc_spawn_vector.cpp b/example/doc_spawn_vector.cpp index 6e286be..e8450d7 100644 --- a/example/doc_spawn_vector.cpp +++ b/example/doc_spawn_vector.cpp @@ -9,7 +9,7 @@ ////////////////////////////////////////////////////////////////////////////// #include #include -//[run_doc_spawn_vector +//[doc_spawn_vector #include #include #include diff --git a/example/doc_windows_shared_memory.cpp b/example/doc_windows_shared_memory.cpp index ccd9c22..09e4cf4 100644 --- a/example/doc_windows_shared_memory.cpp +++ b/example/doc_windows_shared_memory.cpp @@ -17,6 +17,9 @@ #include #include #include +//<- +#include "../test/get_process_id_name.hpp" +//-> int main(int argc, char *argv[]) {