//$Id$ #include "tao/GUIResource_Factory.h" #include "ace/Reactor.h" #include "tao/debug.h" namespace TAO { GUIResource_Factory::GUIResource_Factory (): dynamically_allocated_reactor_ (0) { } GUIResource_Factory::~GUIResource_Factory () { } ACE_Reactor * GUIResource_Factory::get_reactor (void) { // @@Marek, do we need a lock here?? // @Bala, I suppose we don't need locking for any // reasonable use case as this // factory is intended to be a variable in TSS. // I can imagine that someone may try to use it in distinct // threads, though I do not know // what for. Nevertheless, just for a case I sync the creation of reactor. // I think, that double checked locking is // not necessary, because the performance is not an issue here. ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, 0); ACE_Reactor *reactor = 0; ACE_NEW_RETURN (reactor, ACE_Reactor (this->reactor_impl (), 1), 0); if (reactor->initialized () == 0) { delete reactor; reactor = 0; } else this->dynamically_allocated_reactor_ = 1; return reactor; } void GUIResource_Factory::reclaim_reactor (ACE_Reactor *reactor) { ACE_GUARD ( TAO_SYNCH_MUTEX, ace_mon, this->lock_ ); if (this->dynamically_allocated_reactor_ == 1) delete reactor; } }