summaryrefslogtreecommitdiff
path: root/trunk/TAO/examples/AMH/Sink_Server/Timer_Handler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/TAO/examples/AMH/Sink_Server/Timer_Handler.cpp')
-rw-r--r--trunk/TAO/examples/AMH/Sink_Server/Timer_Handler.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/trunk/TAO/examples/AMH/Sink_Server/Timer_Handler.cpp b/trunk/TAO/examples/AMH/Sink_Server/Timer_Handler.cpp
new file mode 100644
index 00000000000..a7f04ba0fb5
--- /dev/null
+++ b/trunk/TAO/examples/AMH/Sink_Server/Timer_Handler.cpp
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+
+// =========================================================================
+/**
+ * @file Timer_Handler.cpp
+ *
+ * $Id$
+ *
+ * @desc Fires servant upcall after a specified period of delay
+ *
+ * @author Mayur Deshpande <mayur@ics.uci.edu>
+ *
+ */
+// =========================================================================
+
+#include "Timer_Handler.h"
+
+Timer_Handler::Timer_Handler (Test::AMH_RoundtripResponseHandler_ptr rh,
+ Test::Timestamp send_time)
+ : rh_ (Test::AMH_RoundtripResponseHandler::_duplicate (rh))
+ , send_time_ (send_time)
+{
+}
+
+int
+Timer_Handler::handle_timeout (const ACE_Time_Value &,
+ const void *)
+{
+ ACE_TRY_NEW_ENV
+ {
+ this->rh_->test_method (this->send_time_);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception in Timer_Handler::handle_timeout \n");
+ return -1;
+ }
+ ACE_ENDTRY;
+
+ // Returning -1 calls handle_close which will clean up and
+ // deregister this handle from the reactor. DO not return anything
+ // else. I changes the return value inadvertently and it caused a
+ // memory leak. should have RTMFed this before. Took me a ****
+ // long time to figure out this memory leak, though in retrospect I
+ // should looked here first.
+ return -1;
+}
+
+
+int
+Timer_Handler::handle_close (ACE_HANDLE,
+ ACE_Reactor_Mask)
+{
+ // deregister from the reactor and destruct
+
+ delete this;
+ return 0;
+}