summaryrefslogtreecommitdiff
path: root/TAO/tests/Bug_1361_Regression/Server_Timer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tests/Bug_1361_Regression/Server_Timer.cpp')
-rw-r--r--TAO/tests/Bug_1361_Regression/Server_Timer.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/TAO/tests/Bug_1361_Regression/Server_Timer.cpp b/TAO/tests/Bug_1361_Regression/Server_Timer.cpp
new file mode 100644
index 00000000000..0d5ad1bb3e5
--- /dev/null
+++ b/TAO/tests/Bug_1361_Regression/Server_Timer.cpp
@@ -0,0 +1,67 @@
+/**
+ * @file Server_Timer.cpp
+ *
+ * $Id$
+ *
+ * @author Carlos O'Ryan <coryan@atdesk.com>
+ *
+ */
+#include "Server_Timer.h"
+#include "ace/Reactor.h"
+
+ACE_RCSID(Bug_1270_Regression, Server_Timer, "$Id$")
+
+Server_Timer::Server_Timer(Test::Echo_ptr echo,
+ ACE_Reactor * reactor)
+ : ACE_Event_Handler (reactor)
+ , echo_(Test::Echo::_duplicate(echo))
+ , refcnt_ (1)
+{
+}
+
+void
+Server_Timer::activate (void)
+{
+ ACE_Time_Value tv (0, 20000);
+ this->reactor()->schedule_timer (this, 0, tv, tv);
+}
+
+int
+Server_Timer::handle_timeout (ACE_Time_Value const &, void const *)
+{
+ refcnt_++;
+
+ ACE_DECLARE_NEW_CORBA_ENV;
+
+ Test::Payload pload(1024); pload.length(1024);
+ ACE_OS::memset(pload.get_buffer(), pload.length(), 0);
+ ACE_TRY
+ {
+ Test::Echo_var echo = Test::Echo::_duplicate(this->echo_.in());
+ if(CORBA::is_nil(echo.in()))
+ return 0;
+
+ echo->echo_payload(pload);
+ }
+ ACE_CATCHANY
+ {
+ this->echo_ = Test::Echo::_nil ();
+
+ if(this->reactor()->cancel_timer(this) != 0)
+ refcnt_--;
+ }
+ ACE_ENDTRY;
+
+ refcnt_--;
+ if(refcnt_ == 0)
+ return -1;
+
+ return 0;
+}
+
+int
+Server_Timer::handle_close (ACE_HANDLE, ACE_Reactor_Mask)
+{
+ delete this;
+ return 0;
+}