summaryrefslogtreecommitdiff
path: root/TAO/tao/GUIResource_Factory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/GUIResource_Factory.cpp')
-rw-r--r--TAO/tao/GUIResource_Factory.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/TAO/tao/GUIResource_Factory.cpp b/TAO/tao/GUIResource_Factory.cpp
new file mode 100644
index 00000000000..33695590b87
--- /dev/null
+++ b/TAO/tao/GUIResource_Factory.cpp
@@ -0,0 +1,59 @@
+//$Id$
+#include "tao/GUIResource_Factory.h"
+#include "ace/Reactor.h"
+#include "tao/debug.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ GUIResource_Factory::GUIResource_Factory (void)
+ : dynamically_allocated_reactor_ (false)
+ {
+ }
+
+ GUIResource_Factory::~GUIResource_Factory (void)
+ {
+ }
+
+ 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_ = 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