📄 rtcosscheduling_serverscheduler_i.cpp
字号:
ACE_DEBUG((LM_DEBUG,
"Server Base Priority not found in config file, "
"RTServerScheduler not used!\n"));
// Here we cannot let the server continue to run at
// RTCORBA:: maxPriority, so it will run at minPriority
// and things will run best effort
this->current_->the_priority(RTCORBA::minPriority);
return;
}
/// Create a new PCP Manager to manage the priority control
COS_SCHEDULING_INVOCATION_VALUE p = 0;
ACE_NEW_THROW_EX(p,
PCP_Manager(
PCP_factory_->New_PCP_Manager(this->current_)),
CORBA::NO_MEMORY());
ACE_TRY_CHECK;
// Get the lock on the resource, using MPCP
p->lock(ceiling + base_priority,
the_client_priority + base_priority);
/// store the thread in the invocation list
this->invocation_map_.bind(
p->threadID(),
p);
ACE_TRY_CHECK;
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION(ACE_ANY_EXCEPTION,
"Unknown exception in the receive request\n");
ACE_OS::exit(1);
}
ACE_ENDTRY;
}
void
RTCosScheduling_ServerScheduler_Interceptor::send_reply(
PortableInterceptor::ServerRequestInfo_ptr ri
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC((
CORBA::SystemException
))
{
ACE_UNUSED_ARG(ri);
finish_execution();
}
void
RTCosScheduling_ServerScheduler_Interceptor::finish_execution()
{
PCP_Manager *p = 0;
this->invocation_map_.unbind((ACE_OS::getpid() << 16) + int(ACE_Thread::self()),p);
if (p)
{
/// Release the Lock on the Thread
p->release_lock();
/// Delete the PCP Manager
delete p;
}
}
char*
RTCosScheduling_ServerScheduler_Interceptor::name(ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC((CORBA::SystemException))
{
return CORBA::string_dup(this->name_);
}
void
RTCosScheduling_ServerScheduler_Interceptor::destroy(ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC((CORBA::SystemException))
{
}
void
RTCosScheduling_ServerScheduler_Interceptor::receive_request_service_contexts(
PortableInterceptor::ServerRequestInfo_ptr ri
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC((
CORBA::SystemException,
PortableInterceptor::ForwardRequest))
{
ACE_UNUSED_ARG(ri);
}
void
RTCosScheduling_ServerScheduler_Interceptor::send_exception(
PortableInterceptor::ServerRequestInfo_ptr ri
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC((CORBA::SystemException,
PortableInterceptor::ForwardRequest))
{
ACE_UNUSED_ARG(ri);
finish_execution();
}
void
RTCosScheduling_ServerScheduler_Interceptor::send_other(
PortableInterceptor::ServerRequestInfo_ptr ri
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC((
CORBA::SystemException,
PortableInterceptor::ForwardRequest))
{
ACE_UNUSED_ARG(ri);
finish_execution();
}
#endif /* TAO_HAS_INTERCEPTORS */
int
RTCosScheduling_ServerScheduler_i::resources(
const char *node_name,
const char *file_name,
CosSchedulingResourceMap *resource_map)
{
/// get the resource list list just for the particular node
const unsigned int BUF_MAX = 256;
FILE *fp = ACE_OS::fopen(file_name, "r");
if (fp == NULL)
{
/// Error return of we cannot open the file.
ACE_ERROR_RETURN((LM_ERROR,
"Could not find the config file %s, aborting\n",
file_name),
0);
}
char line[BUF_MAX], key[16];
ACE_OS::strncpy(key, "Node ", sizeof("Node "));
ACE_OS::strcat(key, node_name);
ACE_OS::clearerr(fp);
do
{
ACE_OS::fgets(line, BUF_MAX, fp);
}
while (ACE_OS::strncmp(line,key,ACE_OS::strlen(key)) != 0);
/// Make sure we did not hit the end of file
if (ACE_OS::last_error() == EOF)
{
ACE_ERROR_RETURN((LM_ERROR,
"Node %s not found in config file, aborting\n",
node_name),
0);
}
/// Skip to the appropriate Task section of the node
ACE_OS::clearerr(fp);
do
{
ACE_OS::fgets(line, BUF_MAX, fp);
}
while (ACE_OS::strncmp(line,
"Resources:",
ACE_OS::strlen("Resources:")
) != 0);
/// Make sure we did not hit the end of file
if (ACE_OS::last_error() == EOF)
{
ACE_ERROR_RETURN((LM_ERROR,
"Resource list not found for node %s, aborting\n",
node_name),
0);
}
CORBA::Short done = 0;
COS_SCHEDULING_RESOURCE_KEY name;
COS_SCHEDULING_RESOURCE_VALUE priority;
u_int delimiter;
/// read each activity/priority pair from the config file
while (!done)
{
/// get the activity name
ACE_OS::fgets(line, BUF_MAX, fp);
/// check to make sure we have not reached the end of the list.
if (ACE_OS::strncmp(line, "END", ACE_OS::strlen(line)-1) != 0)
{
name = ACE_CString(line);
delimiter = name.find('\t');
priority = ACE_OS::atoi(ACE_OS::strchr(line, '\t'));
if (delimiter < name.length() && delimiter > 0)
{
resource_map->bind(name.substr(0, delimiter), priority);
}
else
{
ACE_ERROR_RETURN((LM_ERROR,
"Error in reading resources from %s, aborting",
file_name),
0);
}
}
else
{
done = 1;
}
}
return 1;
}
}
#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
template class ACE_Map<ACE_String_Base<char>, int>;
template class ACE_Hash_Map_Manager_Ex<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> >, ACE_SYNCH_NULL_MUTEX>;
template class ACE_Hash_Map_Manager_Ex<int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int>, ACE_SYNCH_NULL_MUTEX>;
template class ACE_Map<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char> >;
template class ACE_Map_Manager_Adapter<ACE_String_Base<char>, int, ACE_Noop_Key_Generator<ACE_String_Base<char> > >;
template class ACE_Map_Manager<ACE_String_Base<char>, int, ACE_SYNCH_NULL_MUTEX>;
template class ACE_Hash_Map_Manager_Ex_Adapter<int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int>, ACE_Noop_Key_Generator<int> >;
template class ACE_Map<int, TAO::PCP_Manager *>;
template class ACE_Hash_Map_Manager_Ex_Reverse_Iterator_Adapter<ACE_Reference_Pair<int const, TAO::PCP_Manager *>, int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int> >;
template class ACE_Hash_Map_Entry<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char> >;
template class ACE_Hash_Map_Entry<int, TAO::PCP_Manager *>;
template class ACE_Iterator_Impl<ACE_Reference_Pair<int const, TAO::PCP_Manager *> >;
template class ACE_Hash_Map_Manager_Ex_Iterator_Adapter<ACE_Reference_Pair<int const, TAO::PCP_Manager *>, int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int> >;
template class ACE_Hash_Map_Manager_Ex_Adapter<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> >, ACE_Noop_Key_Generator<TAO_Pseudo_Var_T<CORBA::Object> > >;
template class ACE_Iterator_Impl<ACE_Reference_Pair<ACE_String_Base<char> const, int> >;
template class ACE_Reverse_Iterator_Impl<ACE_Reference_Pair<ACE_String_Base<char> const, int> >;
template class ACE_Map_Manager_Reverse_Iterator_Adapter<ACE_Reference_Pair<ACE_String_Base<char> const, int>, ACE_String_Base<char>, int>;
template class ACE_Map_Manager_Iterator_Adapter<ACE_Reference_Pair<ACE_String_Base<char> const, int>, ACE_String_Base<char>, int>;
template class ACE_Reverse_Iterator_Impl<ACE_Reference_Pair<int const, TAO::PCP_Manager *> >;
template class ACE_Hash_Map_Iterator_Base_Ex<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> >, ACE_Null_Mutex>;
template class ACE_Iterator_Impl<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> > >;
template class ACE_Reverse_Iterator_Impl<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> > >;
template class ACE_Hash_Map_Manager_Ex_Reverse_Iterator_Adapter<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> >, TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> > >;
template class ACE_Hash_Map_Manager_Ex_Iterator_Adapter<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> >, TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> > >;
template class ACE_Map_Iterator_Base<ACE_String_Base<char>, int, ACE_Null_Mutex>;
template class ACE_Hash_Map_Iterator_Base_Ex<int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int>, ACE_Null_Mutex>;
#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
#pragma instantiate ACE_Map<ACE_String_Base<char>, int>
#pragma instantiate ACE_Hash_Map_Manager_Ex<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> >, ACE_SYNCH_MUTEX>
#pragma instantiate ACE_Map_Manager<ACE_String_Base<char>, int, ACE_SYNCH_MUTEX>
#pragma instantiate ACE_Hash_Map_Manager_Ex<int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int>, ACE_SYNCH_MUTEX>
#pragma instantiate ACE_Map<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char> >
#pragma instantiate ACE_Map_Manager_Adapter<ACE_String_Base<char>, int, ACE_Noop_Key_Generator<ACE_String_Base<char> > >
#pragma instantiate ACE_Hash_Map_Manager_Ex_Adapter<int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int>, ACE_Noop_Key_Generator<int> >
#pragma instantiate ACE_Map<int, TAO::PCP_Manager *>
#pragma instantiate ACE_Hash_Map_Manager_Ex_Reverse_Iterator_Adapter<ACE_Reference_Pair<int const, TAO::PCP_Manager *>, int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int> >
#pragma instantiate ACE_Hash_Map_Entry<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char> >
#pragma instantiate ACE_Hash_Map_Entry<int, TAO::PCP_Manager *>
#pragma instantiate ACE_Iterator_Impl<ACE_Reference_Pair<int const, TAO::PCP_Manager *> >
#pragma instantiate ACE_Hash_Map_Manager_Ex_Iterator_Adapter<ACE_Reference_Pair<int const, TAO::PCP_Manager *>, int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int> >
#pragma instantiate ACE_Hash_Map_Manager_Ex_Adapter<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> >, ACE_Noop_Key_Generator<TAO_Pseudo_Var_T<CORBA::Object> > >
#pragma instantiate ACE_Iterator_Impl<ACE_Reference_Pair<ACE_String_Base<char> const, int> >
#pragma instantiate ACE_Reverse_Iterator_Impl<ACE_Reference_Pair<ACE_String_Base<char> const, int> >
#pragma instantiateACE_Map_Manager_Reverse_Iterator_Adapter<ACE_Reference_Pair<ACE_String_Base<char> const, int>, ACE_String_Base<char>, int>
#pragma instantiate ACE_Reverse_Iterator_Impl<ACE_Reference_Pair<int const, TAO::PCP_Manager *> >
#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> >, ACE_Null_Mutex>
#pragma instantiate ACE_Iterator_Impl<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> > >
#pragma instantiate ACE_Hash_Map_Manager_Ex_Reverse_Iterator_Adapter<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> >, TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> > >
#pragma instantiate ACE_Hash_Map_Manager_Ex_Iterator_Adapter<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> >, TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> > >
#pragma instantiate ACE_Reverse_Iterator_Impl<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> > >
#pragma instantiate ACE_Map_Iterator_Base<ACE_String_Base<char>, int, ACE_Null_Mutex>
#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int>, ACE_Null_Mutex>
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -