SafetyProfilePool.cpp

Go to the documentation of this file.
00001 /*
00002  *
00003  *
00004  * Distributed under the OpenDDS License.
00005  * See: http://www.opendds.org/license.html
00006  */
00007 
00008 #include "DCPS/DdsDcps_pch.h"  ////Only the _pch include should start with DCPS/
00009 #include "SafetyProfilePool.h"
00010 #include "dds/DCPS/debug.h"
00011 #include <stdexcept>
00012 
00013 #ifdef OPENDDS_SAFETY_PROFILE
00014 namespace OpenDDS {  namespace DCPS {
00015 
00016 SafetyProfilePool::SafetyProfilePool()
00017 : main_pool_(0)
00018 {
00019 }
00020 
00021 SafetyProfilePool::~SafetyProfilePool()
00022 {
00023   // Never delete, because this is always a SAFETY_PROFILE build
00024   //delete main_pool_;
00025 }
00026 
00027 void
00028 SafetyProfilePool::configure_pool(size_t size, size_t granularity)
00029 {
00030   ACE_GUARD(ACE_Thread_Mutex, lock, lock_);
00031 
00032   if (main_pool_ == NULL) {
00033     main_pool_ = new MemoryPool(size, granularity);
00034   }
00035 }
00036 
00037 void
00038 SafetyProfilePool::install()
00039 {
00040   if (ACE_Allocator::instance () != this) {
00041     ACE_Allocator::instance (this);
00042   }
00043 }
00044 
00045 SafetyProfilePool*
00046 SafetyProfilePool::instance() {
00047   return instance_;
00048 }
00049 
00050 SafetyProfilePool* SafetyProfilePool::instance_ = 0;
00051 
00052 struct InstanceMaker {
00053   InstanceMaker() {
00054     SafetyProfilePool::instance_ = new SafetyProfilePool();
00055   }
00056 
00057   ~InstanceMaker() {
00058     if (DCPS_debug_level) {
00059       if (SafetyProfilePool::instance_->main_pool_) {
00060         ACE_DEBUG((LM_INFO, "LWM: main pool: %d bytes\n",
00061                    SafetyProfilePool::instance_->main_pool_->lwm_free_bytes()));
00062       }
00063     }
00064   }
00065 
00066 };
00067 
00068 InstanceMaker instance_maker_;
00069 
00070 }}
00071 
00072 #endif

Generated on Fri Feb 12 20:05:26 2016 for OpenDDS by  doxygen 1.4.7