#include "tao/GUIResource_Factory.h" #include "ace/Reactor.h" #include "ace/Guard_T.h" #include "tao/debug.h" TAO_BEGIN_VERSIONED_NAMESPACE_DECL namespace TAO { GUIResource_Factory::GUIResource_Factory () : dynamically_allocated_reactor_ (false) { } GUIResource_Factory::~GUIResource_Factory () { } ACE_Reactor * GUIResource_Factory::get_reactor () { // @@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_, nullptr); ACE_Reactor *reactor = nullptr; ACE_NEW_RETURN (reactor, ACE_Reactor (this->reactor_impl (), 1), nullptr); if (reactor->initialized () == 0) { delete reactor; reactor = nullptr; } else this->dynamically_allocated_reactor_ = true; return reactor; } void GUIResource_Factory::reclaim_reactor (ACE_Reactor *reactor) { ACE_GUARD ( TAO_SYNCH_MUTEX, ace_mon, this->lock_ ); if (this->dynamically_allocated_reactor_) delete reactor; } } TAO_END_VERSIONED_NAMESPACE_DECL