#include <Wait_On_Read.h>
Inheritance diagram for TAO_Wait_On_Read:


Public Member Functions | |
| TAO_Wait_On_Read (TAO_Transport *transport) | |
| Constructor. | |
| virtual | ~TAO_Wait_On_Read (void) |
| Destructor. | |
| virtual int | wait (ACE_Time_Value *max_wait_time, TAO_Synch_Reply_Dispatcher &rd) |
| virtual int | register_handler (void) |
| virtual bool | non_blocking (void) const |
| virtual bool | can_process_upcalls (void) const |
Definition at line 32 of file Wait_On_Read.h.
|
|
Constructor.
Definition at line 19 of file Wait_On_Read.cpp.
00020 : TAO_Wait_Strategy (transport) 00021 { 00022 } |
|
|
Destructor.
Definition at line 25 of file Wait_On_Read.cpp.
00026 {
00027 }
|
|
|
This flag is to check whether the thread can process upcalls while waiting for the reply. Some wait strategies, like Wait_On_LF_No_Upcall does not allow the client threads to process requests while waiting for the reply. Implements TAO_Wait_Strategy. Definition at line 132 of file Wait_On_Read.cpp.
00133 {
00134 return true;
00135 }
|
|
|
Returns a value to indicate whether the transport needs to set the socket on which it is waiting to non-blocking mode or not. Implements TAO_Wait_Strategy. Definition at line 126 of file Wait_On_Read.cpp.
00127 {
00128 return false;
00129 }
|
|
|
Register the handler needs with the reactor provided that it makes sense for the strategy. Implements TAO_Wait_Strategy. Definition at line 120 of file Wait_On_Read.cpp.
00121 {
00122 return 0;
00123 }
|
|
||||||||||||
|
Base class virtual method. Wait till the Implements TAO_Wait_Strategy. Definition at line 39 of file Wait_On_Read.cpp. References ACE_DEBUG, ACE_ERROR, ACE_TEXT, TAO_ORB_Core::client_factory(), TAO_Transport::close_connection(), TAO_LF_Invocation_Event::error_detected(), TAO_Transport::event_handler_i(), TAO_Transport::handle_input(), TAO_LF_Event::keep_waiting(), LM_DEBUG, LM_ERROR, TAO_Transport::orb_core(), TAO_ORB_Core::reactor(), ACE_Reactor::register_handler(), TAO_LF_Event::state_changed(), TAO_LF_Invocation_Event::successful(), TAO_debug_level, and TAO_Client_Strategy_Factory::use_cleanup_options().
00041 {
00042 // Start the count down timer to account for the time spent in this
00043 // method.
00044 ACE_Countdown_Time countdown (max_wait_time);
00045
00046 rd.state_changed (TAO_LF_Event::LFS_ACTIVE,
00047 this->transport_->orb_core ()->leader_follower ());
00048
00049 // Do the same sort of looping that is done in other wait
00050 // strategies.
00051 int retval = 0;
00052 TAO_Resume_Handle rh;
00053 while (1)
00054 {
00055 retval =
00056 this->transport_->handle_input (rh,
00057 max_wait_time,
00058 1);
00059
00060 // If we got our reply, no need to run the loop any
00061 // further.
00062 if (!rd.keep_waiting ())
00063 break;
00064
00065 // @@ We are not checking for timeouts here...
00066
00067 // If we got an error just break
00068 if (retval == -1)
00069 break;
00070 }
00071
00072 if (rd.error_detected () == -1 || retval == -1)
00073 {
00074 this->transport_->close_connection ();
00075 }
00076
00077 if (rd.successful ())
00078 {
00079 TAO_ORB_Core *oc =
00080 this->transport_->orb_core ();
00081
00082 if (!oc->client_factory ()->use_cleanup_options ())
00083 return 0;
00084
00085 if (TAO_debug_level > 0)
00086 ACE_DEBUG ((LM_DEBUG,
00087 ACE_TEXT ("TAO (%P|%t) - TAO_Wait_On_Read[%d]::wait (), ")
00088 ACE_TEXT ("registering handle for cleanup \n"),
00089 this->transport_->id ()));
00090
00091 ACE_Event_Handler * const eh =
00092 this->transport_->event_handler_i ();
00093
00094 ACE_Reactor * const r =
00095 this->transport_->orb_core ()->reactor ();
00096
00097 if (r->register_handler (eh,
00098 ACE_Event_Handler::READ_MASK) == -1)
00099 {
00100 if (TAO_debug_level > 0)
00101 ACE_ERROR ((LM_ERROR,
00102 ACE_TEXT ("TAO (%P|%t) - TAO_Wait_On_Read[%d]::wait (), ")
00103 ACE_TEXT ("registration with reactor returned an error \n"),
00104 this->transport_->id ()));
00105 }
00106
00107 this->is_registered_ = true;
00108
00109 return 0;
00110 }
00111
00112 if (rd.error_detected ())
00113 return -1;
00114
00115 return 1;
00116 }
|
1.3.6