summaryrefslogtreecommitdiff
path: root/TAO/tao/RTScheduling/Request_Interceptor.cpp
diff options
context:
space:
mode:
authorOssama Othman <ossama-othman@users.noreply.github.com>2003-07-23 21:46:56 +0000
committerOssama Othman <ossama-othman@users.noreply.github.com>2003-07-23 21:46:56 +0000
commita901ce7d04869c0004d12c4eca4ebf4e2ff6f121 (patch)
tree7deec7cf690252fb1f8b3d26adf1dd425c7e5061 /TAO/tao/RTScheduling/Request_Interceptor.cpp
parent82920ca05e6c01f26efee922fe0ed91ae01f537b (diff)
downloadATCD-a901ce7d04869c0004d12c4eca4ebf4e2ff6f121.tar.gz
ChangeLogTag:Wed Jul 23 14:45:32 2003 Ossama Othman <ossama@dre.vanderbilt.edu>
Diffstat (limited to 'TAO/tao/RTScheduling/Request_Interceptor.cpp')
-rw-r--r--TAO/tao/RTScheduling/Request_Interceptor.cpp299
1 files changed, 149 insertions, 150 deletions
diff --git a/TAO/tao/RTScheduling/Request_Interceptor.cpp b/TAO/tao/RTScheduling/Request_Interceptor.cpp
index 044ddd10b3e..5115bc74d0b 100644
--- a/TAO/tao/RTScheduling/Request_Interceptor.cpp
+++ b/TAO/tao/RTScheduling/Request_Interceptor.cpp
@@ -10,12 +10,12 @@ Client_Interceptor::SchedulingInfo = 30;
Client_Interceptor::Client_Interceptor (void)
{
-}
+}
-void
+void
Client_Interceptor::send_request (PortableInterceptor::ClientRequestInfo_ptr ri
ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException,
+ ACE_THROW_SPEC ((CORBA::SystemException,
PortableInterceptor::ForwardRequest))
{
if (TAO_debug_level > 0)
@@ -25,40 +25,41 @@ Client_Interceptor::send_request (PortableInterceptor::ClientRequestInfo_ptr ri
// Temporary current.
TAO_RTScheduler_Current_i *new_current = 0;
TAO_RTScheduler_Current_i *current = 0;
-
+
TAO_TSS_Resources *tss = TAO_TSS_RESOURCES::instance ();
-
+
current = ACE_static_cast (TAO_RTScheduler_Current_i *,
tss->rtscheduler_current_impl_);
-
+
if (current != 0)
{
// If this is a one way request
- if (!ri->response_expected ())
+ if (!ri->response_expected ())
{
-
+
// Generate GUID.
RTScheduling::Current::IdType guid;
guid.length (sizeof(long));
-
+
long temp = ++guid_counter;
ACE_OS::memcpy (guid.get_buffer (),
&temp,
sizeof(long));
-
+
int id;
ACE_OS::memcpy (&id,
guid.get_buffer (),
guid.length ());
-
+
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
"The Guid is %d %d\n",
id,
guid_counter.value_i ()));
-
+
// Create new DT.
- RTScheduling::DistributableThread_var dt = TAO_DistributableThread_Factory::create_DT ();
+ RTScheduling::DistributableThread_var dt =
+ TAO_DistributableThread_Factory::create_DT ();
// Add new DT to map.
int result = current->dt_hash ()->bind (guid, dt);
@@ -67,11 +68,11 @@ Client_Interceptor::send_request (PortableInterceptor::ClientRequestInfo_ptr ri
ACE_DEBUG ((LM_DEBUG,
"No Scheduling Segment Context\n"));
ACE_THROW (CORBA::INTERNAL ());
-
+
}
// @@ Store implicit_sched_param in a var
-
+
// Create new temporary current. Note that
// the new <sched_param> is the current
// <implicit_sched_param> and there is no
@@ -85,19 +86,19 @@ Client_Interceptor::send_request (PortableInterceptor::ClientRequestInfo_ptr ri
0,
dt.in (),
current));
-
+
// Install new current in the ORB.
//current->implementation (new_current);
tss->rtscheduler_current_impl_ = new_current;
}
-
+
// Scheduler populates the service context with
// scheduling parameters.
current->scheduler ()->send_request (ri);
-
+
// If this is a one way request
- if (!ri->response_expected ())
+ if (!ri->response_expected ())
{
// Cleanup temporary DT.
new_current->cleanup_DT ();
@@ -108,7 +109,7 @@ Client_Interceptor::send_request (PortableInterceptor::ClientRequestInfo_ptr ri
}
}
-void
+void
Client_Interceptor::send_poll (PortableInterceptor::ClientRequestInfo_ptr ri
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
@@ -118,17 +119,17 @@ Client_Interceptor::send_poll (PortableInterceptor::ClientRequestInfo_ptr ri
"Client_Interceptor::send_poll\n"));
TAO_RTScheduler_Current_i *current = 0;
-
+
TAO_TSS_Resources *tss = TAO_TSS_RESOURCES::instance ();
-
+
current = ACE_static_cast (TAO_RTScheduler_Current_i *,
tss->rtscheduler_current_impl_);
if (current != 0)
current->scheduler ()->receive_reply (ri);
-
+
}
-void
+void
Client_Interceptor::receive_reply (PortableInterceptor::ClientRequestInfo_ptr ri
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
@@ -138,45 +139,45 @@ Client_Interceptor::receive_reply (PortableInterceptor::ClientRequestInfo_ptr ri
"Client_Interceptor::receive_reply\n"));
TAO_RTScheduler_Current_i *current = 0;
-
+
TAO_TSS_Resources *tss = TAO_TSS_RESOURCES::instance ();
-
+
current = ACE_static_cast (TAO_RTScheduler_Current_i *,
tss->rtscheduler_current_impl_);
if (current != 0)
current->scheduler ()->receive_reply (ri);
}
-
-void
+
+void
Client_Interceptor::receive_exception (PortableInterceptor::ClientRequestInfo_ptr ri
ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException,
+ ACE_THROW_SPEC ((CORBA::SystemException,
PortableInterceptor::ForwardRequest))
{
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
"Client_Interceptor::receive_exception\n"));
-
+
TAO_RTScheduler_Current_i *current = 0;
-
+
TAO_TSS_Resources *tss = TAO_TSS_RESOURCES::instance ();
-
+
current = ACE_static_cast (TAO_RTScheduler_Current_i *,
tss->rtscheduler_current_impl_);
-
+
if (current != 0)
{
CORBA::Any_var ex = ri->received_exception ();
CORBA::TypeCode_var type = ex->type ();
const char * id = type->id ();
-
+
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
"Received Exception %s\n",
id));
-
+
// If the remote host threw a THREAD_CANCELLED
// exception, make sure to take the appropriate
@@ -195,11 +196,11 @@ Client_Interceptor::receive_exception (PortableInterceptor::ClientRequestInfo_pt
}
}
}
-
-void
+
+void
Client_Interceptor::receive_other (PortableInterceptor::ClientRequestInfo_ptr ri
ACE_ENV_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException,
+ ACE_THROW_SPEC ((CORBA::SystemException,
PortableInterceptor::ForwardRequest))
{
if (TAO_debug_level > 0)
@@ -207,9 +208,9 @@ Client_Interceptor::receive_other (PortableInterceptor::ClientRequestInfo_ptr ri
"Client_Interceptor::receive_other\n"));
TAO_RTScheduler_Current_i *current = 0;
-
+
TAO_TSS_Resources *tss = TAO_TSS_RESOURCES::instance ();
-
+
current = ACE_static_cast (TAO_RTScheduler_Current_i *,
tss->rtscheduler_current_impl_);
if (current != 0)
@@ -217,14 +218,14 @@ Client_Interceptor::receive_other (PortableInterceptor::ClientRequestInfo_ptr ri
}
-char*
+char*
Client_Interceptor::name (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return CORBA::string_dup ("RTSchdeuler_Client_Interceptor");
}
-void
+void
Client_Interceptor::destroy (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
@@ -236,12 +237,12 @@ Server_Interceptor::SchedulingInfo = 30;
Server_Interceptor::Server_Interceptor (TAO_RTScheduler_Current_ptr current)
{
this->current_ = TAO_RTScheduler_Current::_duplicate (current);
-}
+}
-void
+void
Server_Interceptor::receive_request_service_contexts (PortableInterceptor::ServerRequestInfo_ptr
ACE_ENV_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException,
+ ACE_THROW_SPEC ((CORBA::SystemException,
PortableInterceptor::ForwardRequest))
{
if (TAO_debug_level > 0)
@@ -249,22 +250,25 @@ Server_Interceptor::receive_request_service_contexts (PortableInterceptor::Serve
"Server_Interceptor::receive_request_service_contexts\n"));
}
-
-void
+
+void
Server_Interceptor::receive_request (PortableInterceptor::ServerRequestInfo_ptr ri
ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException,
+ ACE_THROW_SPEC ((CORBA::SystemException,
PortableInterceptor::ForwardRequest))
{
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
"Server_Interceptor::receive_request\n"));
- IOP::ServiceContext* serv_cxt = 0;
-
+ IOP::ServiceContext_var serv_cxt;
+
ACE_TRY
{
- serv_cxt = ri->get_request_service_context (Server_Interceptor::SchedulingInfo);
+ serv_cxt =
+ ri->get_request_service_context (Server_Interceptor::SchedulingInfo
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
}
ACE_CATCHANY
{
@@ -273,92 +277,88 @@ Server_Interceptor::receive_request (PortableInterceptor::ServerRequestInfo_ptr
"Invalid Service REquest\n"));
}
ACE_ENDTRY;
+ ACE_CHECK;
- if (serv_cxt != 0)
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "Request from Distributable Thread\n"));
+
+ RTScheduling::Current::IdType_var guid_var;
+ char* name = 0;
+ CORBA::Policy_ptr sched_param = 0;
+ CORBA::Policy_ptr implicit_sched_param = 0;
+
+ TAO_RTScheduler_Current_i* new_current;
+ ACE_NEW_THROW_EX (new_current,
+ TAO_RTScheduler_Current_i (this->current_->orb (),
+ this->current_->dt_hash ()),
+ CORBA::NO_MEMORY (
+ CORBA::SystemException::_tao_minor_code (
+ TAO_DEFAULT_MINOR_CODE,
+ ENOMEM),
+ CORBA::COMPLETED_NO));
+ ACE_CHECK;
+
+ // Scheduler retrieves scheduling parameters
+ // from request and populates the out
+ // parameters.
+ new_current->scheduler()->receive_request (ri,
+ guid_var.out (),
+ name,
+ sched_param,
+ implicit_sched_param);
+
+ if (guid_var.in () == 0)
{
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "Request from Distributable Thread\n"));
-
- RTScheduling::Current::IdType_var guid_var;
- char* name = 0;
- CORBA::Policy_ptr sched_param = 0;
- CORBA::Policy_ptr implicit_sched_param = 0;
-
- TAO_RTScheduler_Current_i* new_current;
- ACE_NEW_THROW_EX (new_current,
- TAO_RTScheduler_Current_i (this->current_->orb (),
- this->current_->dt_hash ()),
- CORBA::NO_MEMORY (
- CORBA::SystemException::_tao_minor_code (
- TAO_DEFAULT_MINOR_CODE,
- ENOMEM),
- CORBA::COMPLETED_NO));
-
-
- // Scheduler retrieves scheduling parameters
- // from request and populates the out
- // parameters.
- new_current->scheduler()->receive_request(ri,
- guid_var.out (),
- name,
- sched_param,
- implicit_sched_param);
-
-
- if (guid_var.in () == 0)
- {
- ACE_ERROR ((LM_ERROR,
- "The scheduler MUST retreive and return the GUID from the service context\n"));
- return;
- }
- RTScheduling::Current::IdType guid;
- guid.length (sizeof (long));
- ACE_OS::memcpy (guid.get_buffer (),
- guid_var->get_buffer (),
- sizeof (long));
-
- int id;
- ACE_OS::memcpy (&id,
- guid.get_buffer (),
- guid.length ());
-
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "The Guid is %d \n",
- id));
-
- // Create new DT.
- RTScheduling::DistributableThread_var dt = TAO_DistributableThread_Factory::create_DT ();
-
- // Add new DT to map.
- int result = new_current->dt_hash ()->bind (guid, dt);
-
- if (result != 0)
- {
- ACE_THROW (CORBA::INTERNAL ());
- }
-
- // Create new temporary current. Note that
- // the new <sched_param> is the current
- // <implicit_sched_param> and there is no
- // segment name.
- new_current->id (guid);
- new_current->name (name);
- new_current->scheduling_parameter (sched_param);
- new_current->implicit_scheduling_parameter (implicit_sched_param);
- new_current->DT (dt.in ());
-
- // Install new current in the ORB and store the previous
- // current implementation
- // current->implementation (new_current)
- TAO_TSS_Resources *tss = TAO_TSS_RESOURCES::instance ();
-
- tss->rtscheduler_previous_current_impl_ = this->current_->implementation (new_current);
+ ACE_ERROR ((LM_ERROR,
+ "The scheduler MUST retreive and return the "
+ "GUID from the service context\n"));
+ return;
}
+ RTScheduling::Current::IdType guid;
+ guid.length (sizeof (long));
+ ACE_OS::memcpy (guid.get_buffer (),
+ guid_var->get_buffer (),
+ sizeof (long));
+
+ int id;
+ ACE_OS::memcpy (&id,
+ guid.get_buffer (),
+ guid.length ());
+
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "The Guid is %d \n",
+ id));
+
+ // Create new DT.
+ RTScheduling::DistributableThread_var dt = TAO_DistributableThread_Factory::create_DT ();
+
+ // Add new DT to map.
+ int result = new_current->dt_hash ()->bind (guid, dt);
+
+ if (result != 0)
+ {
+ ACE_THROW (CORBA::INTERNAL ());
+ }
+
+ // Create new temporary current. Note that the new <sched_param> is
+ // the current <implicit_sched_param> and there is no segment name.
+ new_current->id (guid);
+ new_current->name (name);
+ new_current->scheduling_parameter (sched_param);
+ new_current->implicit_scheduling_parameter (implicit_sched_param);
+ new_current->DT (dt.in ());
+
+ // Install new current in the ORB and store the previous current
+ // implementation
+ // current->implementation (new_current)
+ TAO_TSS_Resources *tss = TAO_TSS_RESOURCES::instance ();
+
+ tss->rtscheduler_previous_current_impl_ = this->current_->implementation (new_current);
}
-void
+void
Server_Interceptor::send_reply (PortableInterceptor::ServerRequestInfo_ptr ri
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
@@ -369,9 +369,9 @@ Server_Interceptor::send_reply (PortableInterceptor::ServerRequestInfo_ptr ri
TAO_RTScheduler_Current_i *current = 0;
TAO_RTScheduler_Current_i *prev_current = 0;
-
+
TAO_TSS_Resources *tss = TAO_TSS_RESOURCES::instance ();
-
+
current = ACE_static_cast (TAO_RTScheduler_Current_i *,
tss->rtscheduler_current_impl_);
if (current != 0)
@@ -387,13 +387,13 @@ Server_Interceptor::send_reply (PortableInterceptor::ServerRequestInfo_ptr ri
// Get the previous current if any.
prev_current = ACE_static_cast (TAO_RTScheduler_Current_i *,
tss->rtscheduler_previous_current_impl_);
-
+
// Restore the previous current.
tss->rtscheduler_current_impl_ = prev_current;
-
+
// Reset the previous current pointer.
tss->rtscheduler_previous_current_impl_ = 0;
-
+
// Inform scheduler that upcall is complete.
current->scheduler ()->send_reply (ri);
@@ -402,8 +402,8 @@ Server_Interceptor::send_reply (PortableInterceptor::ServerRequestInfo_ptr ri
}
}
-
-void
+
+void
Server_Interceptor::send_exception (PortableInterceptor::ServerRequestInfo_ptr ri
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException,
@@ -414,22 +414,22 @@ Server_Interceptor::send_exception (PortableInterceptor::ServerRequestInfo_ptr r
"Server_Interceptor::send_exception\n"));
TAO_RTScheduler_Current_i *current = 0;
-
+
TAO_TSS_Resources *tss = TAO_TSS_RESOURCES::instance ();
-
+
current = ACE_static_cast (TAO_RTScheduler_Current_i *,
tss->rtscheduler_current_impl_);
if (current != 0)
{
// Inform scheduler that upcall is complete.
current->scheduler ()->send_exception (ri);
-
+
current->cleanup_DT ();
current->cleanup_current ();
}
}
-
-void
+
+void
Server_Interceptor::send_other (PortableInterceptor::ServerRequestInfo_ptr ri
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException,
@@ -440,32 +440,31 @@ Server_Interceptor::send_other (PortableInterceptor::ServerRequestInfo_ptr ri
"Server_Interceptor::send_other\n"));
TAO_RTScheduler_Current_i *current = 0;
-
+
TAO_TSS_Resources *tss = TAO_TSS_RESOURCES::instance ();
-
+
current = ACE_static_cast (TAO_RTScheduler_Current_i *,
tss->rtscheduler_current_impl_);
if (current != 0)
{
// Inform scheduler that upcall is complete.
current->scheduler ()->send_other (ri);
-
+
current->cleanup_DT ();
current->cleanup_current ();
}
}
-char*
+char*
Server_Interceptor::name (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return CORBA::string_dup ("RTSchdeuler_Server_Interceptor");
}
-void
+void
Server_Interceptor::destroy (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
}
-