summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TAO/orbsvcs/orbsvcs/RtecScheduler.idl11
-rw-r--r--TAO/orbsvcs/orbsvcs/Sched/Config_Scheduler.cpp128
-rw-r--r--TAO/orbsvcs/orbsvcs/Sched/Config_Scheduler.h64
-rw-r--r--TAO/orbsvcs/orbsvcs/Sched/DynSched.cpp64
-rw-r--r--TAO/orbsvcs/orbsvcs/Sched/DynSched.h29
-rw-r--r--TAO/orbsvcs/orbsvcs/Sched/Scheduler.h6
-rw-r--r--TAO/orbsvcs/orbsvcs/Sched/Strategy_Scheduler.cpp247
-rw-r--r--TAO/orbsvcs/orbsvcs/Sched/Strategy_Scheduler.h99
-rw-r--r--TAO/orbsvcs/orbsvcs/orbsvcs.dsp62
-rw-r--r--ace/ace_dll.dsp31
10 files changed, 641 insertions, 100 deletions
diff --git a/TAO/orbsvcs/orbsvcs/RtecScheduler.idl b/TAO/orbsvcs/orbsvcs/RtecScheduler.idl
index 11efec1faa0..b2efd5d2d79 100644
--- a/TAO/orbsvcs/orbsvcs/RtecScheduler.idl
+++ b/TAO/orbsvcs/orbsvcs/RtecScheduler.idl
@@ -118,12 +118,15 @@ module RtecScheduler
// The operations we depend upon.
Dependency_Set dependencies;
- // The OS por processing the events generated
- // from this RT_Info.
+ // The OS thread priority for processing the
+ // events generated from this RT_Info.
OS_Priority priority;
- // For ordering RT_Info's with equal priority.
- Sub_Priority dynamic_subpriority;
+ // For ordering RT_Info's with equal priority.
+ Sub_Priority dynamic_subpriority;
+// this is not really a fixed attribute of the RT_Info,
+// but rather a value dynamically computed at run-time
+// TBD - remove this field
// For ordering RT_Info's with equal priority.
Sub_Priority static_subpriority;
diff --git a/TAO/orbsvcs/orbsvcs/Sched/Config_Scheduler.cpp b/TAO/orbsvcs/orbsvcs/Sched/Config_Scheduler.cpp
index 96919937af5..0e6504900fe 100644
--- a/TAO/orbsvcs/orbsvcs/Sched/Config_Scheduler.cpp
+++ b/TAO/orbsvcs/orbsvcs/Sched/Config_Scheduler.cpp
@@ -7,7 +7,9 @@
#include "orbsvcs/Time_Utilities.h"
#include "orbsvcs/Scheduler_Factory.h"
-#include "Scheduler_Generic.h"
+// #include "Scheduler_Generic.h"
+#include "Strategy_Scheduler.h"
+
#include "Config_Scheduler.h"
#if defined (__ACE_INLINE__)
@@ -15,7 +17,12 @@
#endif /* __ACE_INLINE__ */
ACE_Config_Scheduler::ACE_Config_Scheduler (void)
- : impl(new Scheduler_Generic)
+#if defined (TAO_USES_STRATEGY_SCHEDULER)
+ : scheduler_strategy_ ((RtecScheduler::Preemption_Priority) TAO_MIN_CRITICAL_PRIORITY)
+ , impl (new ACE_Strategy_Scheduler (scheduler_strategy_))
+#else
+ : impl (new Scheduler_Generic)
+#endif /* defined (TAO_USES_STRATEGY_SCHEDULER) */
{
// impl->output_level (10);
}
@@ -53,12 +60,17 @@ ACE_Config_Scheduler::create (const char * entry_point,
rt_info[0]->preemption_priority = 0;
RtecScheduler::handle_t handle = -1;
+#if defined (TAO_USES_STRATEGY_SCHEDULER)
+ switch (impl->register_task (rt_info[0], handle))
+#else
switch (impl->register_task (rt_info, 1, handle))
+#endif /* defined (TAO_USES_STRATEGY_SCHEDULER) */
+
{
- case ACE_Scheduler::SUCCEEDED:
+ case BaseSchedImplType::SUCCEEDED:
break;
- case ACE_Scheduler::ST_VIRTUAL_MEMORY_EXHAUSTED:
- case ACE_Scheduler::ST_TASK_ALREADY_REGISTERED:
+ case BaseSchedImplType::ST_VIRTUAL_MEMORY_EXHAUSTED:
+ case BaseSchedImplType::ST_TASK_ALREADY_REGISTERED:
default:
delete rt_info[0];
delete[] rt_info;
@@ -78,11 +90,11 @@ ACE_Config_Scheduler::lookup (const char * entry_point,
RtecScheduler::RT_Info* rt_info = 0;
switch (impl->get_rt_info (entry_point, rt_info))
{
- case ACE_Scheduler::SUCCEEDED:
+ case BaseSchedImplType::SUCCEEDED:
return rt_info->handle;
ACE_NOTREACHED (break);
- case ACE_Scheduler::FAILED:
- case ACE_Scheduler::ST_UNKNOWN_TASK:
+ case BaseSchedImplType::FAILED:
+ case BaseSchedImplType::ST_UNKNOWN_TASK:
default:
ACE_ERROR ((LM_ERROR,
"Config_Scheduler::lookup - get_rt_info failed\n"));
@@ -101,7 +113,7 @@ ACE_Config_Scheduler::get (RtecScheduler::handle_t handle,
RtecScheduler::RT_Info* rt_info = 0;
switch (impl->lookup_rt_info (handle, rt_info))
{
- case ACE_Scheduler::SUCCEEDED:
+ case BaseSchedImplType::SUCCEEDED:
{
// IDL memory managment semantics require the we return a copy
RtecScheduler::RT_Info* copy;
@@ -109,8 +121,8 @@ ACE_Config_Scheduler::get (RtecScheduler::handle_t handle,
return copy;
}
ACE_NOTREACHED (break);
- case ACE_Scheduler::FAILED:
- case ACE_Scheduler::ST_UNKNOWN_TASK:
+ case BaseSchedImplType::FAILED:
+ case BaseSchedImplType::ST_UNKNOWN_TASK:
default:
ACE_ERROR ((LM_ERROR,
"Config_Scheduler::get - lookup_rt_info failed\n"));
@@ -137,7 +149,7 @@ void ACE_Config_Scheduler::set (RtecScheduler::handle_t handle,
RtecScheduler::RT_Info* rt_info = 0;
switch (impl->lookup_rt_info (handle, rt_info))
{
- case ACE_Scheduler::SUCCEEDED:
+ case BaseSchedImplType::SUCCEEDED:
rt_info->criticality = criticality,
rt_info->worst_case_execution_time = time;
rt_info->typical_execution_time = typical_time;
@@ -148,8 +160,8 @@ void ACE_Config_Scheduler::set (RtecScheduler::handle_t handle,
rt_info->threads = threads;
rt_info->info_type = info_type;
break;
- case ACE_Scheduler::FAILED:
- case ACE_Scheduler::ST_UNKNOWN_TASK:
+ case BaseSchedImplType::FAILED:
+ case BaseSchedImplType::ST_UNKNOWN_TASK:
default:
ACE_ERROR ((LM_ERROR,
"Config_Scheduler::set - lookup_rt_info failed\n"));
@@ -205,17 +217,22 @@ void ACE_Config_Scheduler::add_dependency (RtecScheduler::handle_t handle,
RtecScheduler::RT_Info* rt_info = 0;
switch (impl->lookup_rt_info (handle, rt_info))
{
- case ACE_Scheduler::SUCCEEDED:
+ case BaseSchedImplType::SUCCEEDED:
{
RtecScheduler::Dependency_Info dep;
dep.rt_info = dependency;
dep.number_of_calls = number_of_calls;
dep.dependency_type = dependency_type;
- ACE_Scheduler::add_dependency(rt_info, dep);
+#if defined (TAO_USES_STRATEGY_SCHEDULER)
+ impl->add_dependency (rt_info, dep);
+#else
+ BaseSchedImplType::add_dependency (rt_info, dep);
+#endif /* defined (TAO_USES_STRATEGY_SCHEDULER) */
+
}
break;
- case ACE_Scheduler::FAILED:
- case ACE_Scheduler::ST_UNKNOWN_TASK:
+ case BaseSchedImplType::FAILED:
+ case BaseSchedImplType::ST_UNKNOWN_TASK:
default:
ACE_ERROR ((LM_ERROR,
"cannot find %d to add dependency", handle));
@@ -236,7 +253,7 @@ void ACE_Config_Scheduler::compute_scheduling (CORBA::Long minimum_priority,
ACE_UNUSED_ARG (_env);
impl->init (minimum_priority, maximum_priority);
- if (impl->schedule () != ACE_Scheduler::SUCCEEDED)
+ if (impl->schedule () != BaseSchedImplType::SUCCEEDED)
{
// TODO: throw something.
ACE_ERROR ((LM_ERROR, "schedule failed\n"));
@@ -254,12 +271,12 @@ void ACE_Config_Scheduler::compute_scheduling (CORBA::Long minimum_priority,
RtecScheduler::RT_Info* rt_info = 0;
switch (impl->lookup_rt_info (handle, rt_info))
{
- case ACE_Scheduler::SUCCEEDED:
+ case BaseSchedImplType::SUCCEEDED:
// We know that handles start at 1.
infos[CORBA::ULong(handle - 1)] = *rt_info;
break;
- case ACE_Scheduler::FAILED:
- case ACE_Scheduler::ST_UNKNOWN_TASK:
+ case BaseSchedImplType::FAILED:
+ case BaseSchedImplType::ST_UNKNOWN_TASK:
default:
ACE_ERROR ((LM_ERROR,
"Config_Scheduler::schedule - lookup_rt_info failed\n"));
@@ -273,3 +290,70 @@ void ACE_Config_Scheduler::compute_scheduling (CORBA::Long minimum_priority,
ACE_Scheduler_Factory::dump_schedule (*(infos.ptr()), 0);
ACE_DEBUG ((LM_DEBUG, "dump done\n"));
}
+
+
+#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
+ #if defined (TAO_USES_STRATEGY_SCHEDULER)
+ #if defined (TAO_USES_MUF_SCHEDULING)
+
+ template class ACE_Strategy_Scheduler_Factory<ACE_MUF_Scheduler_Strategy>;
+
+ #elif defined (TAO_USES_MLF_SCHEDULING)
+
+ template class ACE_Strategy_Scheduler_Factory<ACE_MLF_Scheduler_Strategy>;
+
+ #elif defined (TAO_USES_EDF_SCHEDULING)
+
+ template class ACE_Strategy_Scheduler_Factory<ACE_EDF_Scheduler_Strategy>;
+
+ #elif defined (TAO_USES_RMS_SCHEDULING)
+
+ template class ACE_Strategy_Scheduler_Factory<ACE_RMS_Scheduler_Strategy>;
+
+ #elif defined (TAO_USES_RMS_DYN_SCHEDULING)
+
+ template class ACE_Strategy_Scheduler_Factory<ACE_RMS_Dyn_Scheduler_Strategy>;
+
+ #else
+
+ #error scheduling strategy must be defined
+
+ #endif /* defined (TAO_USES_MUF_SCHEDULING) */
+ #endif /* defined (TAO_USES_STRATEGY_SCHEDULER) */
+
+#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
+#pragma instantiate
+ #if defined (TAO_USES_STRATEGY_SCHEDULER)
+ #if defined (TAO_USES_MUF_SCHEDULING)
+
+ #pragma instantiate ACE_Strategy_Scheduler_Factory<ACE_MUF_Scheduler_Strategy>
+
+ #elif defined (TAO_USES_MLF_SCHEDULING)
+
+ #pragma instantiate ACE_Strategy_Scheduler_Factory<ACE_MLF_Scheduler_Strategy>
+
+ #elif defined (TAO_USES_EDF_SCHEDULING)
+
+ #pragma instantiate ACE_Strategy_Scheduler_Factory<ACE_EDF_Scheduler_Strategy>
+
+ #elif defined (TAO_USES_RMS_SCHEDULING)
+
+ #pragma instantiate ACE_Strategy_Scheduler_Factory<ACE_RMS_Scheduler_Strategy>
+
+ #elif defined (TAO_USES_RMS_DYN_SCHEDULING)
+
+ #pragma instantiate ACE_Strategy_Scheduler_Factory<ACE_RMS_Dyn_Scheduler_Strategy>
+
+ #else
+
+ #error scheduling strategy must be defined
+
+ #endif /* defined (TAO_USES_MUF_SCHEDULING) */
+ #endif /* defined (TAO_USES_STRATEGY_SCHEDULER) */
+#endif /* defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) */
+
+
+
+
+
+
diff --git a/TAO/orbsvcs/orbsvcs/Sched/Config_Scheduler.h b/TAO/orbsvcs/orbsvcs/Sched/Config_Scheduler.h
index d4c873fcc0e..ba1a8f07962 100644
--- a/TAO/orbsvcs/orbsvcs/Sched/Config_Scheduler.h
+++ b/TAO/orbsvcs/orbsvcs/Sched/Config_Scheduler.h
@@ -19,6 +19,7 @@ class TAO_ORBSVCS_Export ACE_Config_Scheduler
// distributed with the EC.
{
public:
+
ACE_Config_Scheduler (void);
virtual ~ACE_Config_Scheduler (void);
@@ -83,7 +84,59 @@ public:
RtecScheduler::TASK_COUNT_MISMATCH));
private:
- class ACE_Scheduler* impl;
+
+#if defined (TAO_USES_STRATEGY_SCHEDULER)
+
+ // trait for the scheduler implementation base class
+ typedef ACE_DynScheduler BaseSchedImplType;
+
+ // traits for the scheduler strategy
+#if defined (TAO_USES_MUF_SCHEDULING)
+
+ typedef ACE_MUF_Scheduler_Strategy Scheduler_Strategy;
+
+#elif defined (TAO_USES_MLF_SCHEDULING)
+
+ #if ! defined (TAO_MIN_CRITICAL_PRIORITY)
+ #define TAO_MIN_CRITICAL_PRIORITY 0
+ #endif /* ! defined (TAO_MIN_CRITICAL_PRIORITY) */
+
+ typedef ACE_MLF_Scheduler_Strategy Scheduler_Strategy;
+
+#elif defined (TAO_USES_EDF_SCHEDULING)
+
+ #if ! defined (TAO_MIN_CRITICAL_PRIORITY)
+ #define TAO_MIN_CRITICAL_PRIORITY 0
+ #endif /* ! defined (TAO_MIN_CRITICAL_PRIORITY) */
+
+ typedef ACE_EDF_Scheduler_Strategy Scheduler_Strategy;
+
+#elif defined (TAO_USES_RMS_SCHEDULING)
+
+ typedef ACE_RMS_Scheduler_Strategy Scheduler_Strategy;
+
+#elif defined (TAO_USES_RMS_DYN_SCHEDULING)
+
+ typedef ACE_RMS_Dyn_Scheduler_Strategy Scheduler_Strategy;
+
+#else
+
+ #error scheduling strategy must be defined
+
+#endif /* defined (TAO_USES_MUF_SCHEDULING) */
+
+ Scheduler_Strategy scheduler_strategy_;
+
+#else /* ! defined (TAO_USES_STRATEGY_SCHEDULER) */
+
+ // trait for the scheduler implementation base class
+ typedef ACE_DynScheduler BaseSchedImplType;
+
+#endif /* defined (TAO_USES_STRATEGY_SCHEDULER) */
+
+ // implementation base class pointer
+ BaseSchedImplType* impl;
+
};
#if defined (__ACE_INLINE__)
@@ -91,3 +144,12 @@ private:
#endif /* __ACE_INLINE__ */
#endif /* ACE_CONFIG_SCHEDULER_H */
+
+
+
+
+
+
+
+
+
diff --git a/TAO/orbsvcs/orbsvcs/Sched/DynSched.cpp b/TAO/orbsvcs/orbsvcs/Sched/DynSched.cpp
index ab91d3b793e..fa110e2522d 100644
--- a/TAO/orbsvcs/orbsvcs/Sched/DynSched.cpp
+++ b/TAO/orbsvcs/orbsvcs/Sched/DynSched.cpp
@@ -190,13 +190,19 @@ ACE_DynScheduler::register_task (RT_Info *rt_info, handle_t &handle)
{
ACE_DynScheduler::status_t ret;
+ // check the pointer we were passed
+ if (! rt_info)
+ {
+ handle = 0;
+ return ST_UNKNOWN_TASK;
+ }
+
// try to store the new task's information . . .
switch (rt_info_entries_.insert (rt_info))
{
case 0 : // successfully inserted
{
rt_info->handle = (handle = ++handles_);
-
ret = SUCCEEDED;
// zero out the task entry ACT used by the scheduler
@@ -208,7 +214,7 @@ ACE_DynScheduler::register_task (RT_Info *rt_info, handle_t &handle)
if (output_level () >= 5)
{
ACE_OS::printf ("registered task \"%s\" with RT_Info at %X\n",
- (const char*)rt_info->entry_point,
+ (const char*)(rt_info->entry_point),
(void *) rt_info);
}
}
@@ -280,6 +286,52 @@ ACE_DynScheduler::get_rt_info (Object_Name name,
+
+int ACE_DynScheduler::priority (
+ const RtecScheduler::handle_t handle,
+ RtecScheduler::OS_Priority &priority,
+ RtecScheduler::Sub_Priority &subpriority,
+ RtecScheduler::Preemption_Priority &preemption_prio)
+{
+ // look up the RT_Info that has the given handle
+ RT_Info *rt_info = 0;
+ if (lookup_rt_info (handle, rt_info) == SUCCEEDED)
+ {
+ // copy the priority values from the RT_Info
+ priority = rt_info->priority;
+ subpriority = rt_info->static_subpriority;
+ preemption_prio = rt_info->preemption_priority;
+
+ return 0;
+ }
+ else
+
+ {
+ // RT_Info not found: assign default priority values
+ priority = minimum_priority_;
+ subpriority = ACE_Scheduler_MIN_SUB_PRIORITY;
+ preemption_prio = ACE_Scheduler_MAX_PREEMPTION_PRIORITY;
+
+ if (output_level () >= 3)
+ {
+ ACE_OS::printf ("preemption_prio %d: min %d, pri %d, min_pri %d\n",
+ preemption_prio, minimum_priority_queue (),
+ priority, minimum_priority_);
+ }
+
+ return -1;
+ }
+}
+ // "priority" is the OS thread priority that was assigned to the Task that
+ // was assigned "handle". "subpriority" combines the dynamic and static
+ // subpriorities of the Task that was assigned handle. "preemption_prio"
+ // is a platform-independent priority queue number, ranging from a
+ // highest priority value of 0 to the lowest priority value, which is
+ // returned by "minimum_priority_queue ()". The current and deadline times
+ // supplied are used to compute the operation's dynamic subpriority
+ // Returns 0 on success, or -1 if an invalid handle was supplied.
+
+
int ACE_DynScheduler::number_of_dependencies(RT_Info* rt_info)
{
return rt_info->dependencies.length();
@@ -291,7 +343,7 @@ int ACE_DynScheduler::number_of_dependencies(RT_Info& rt_info)
}
int ACE_DynScheduler::add_dependency(RT_Info* rt_info,
- Dependency_Info& d)
+ Dependency_Info& d)
{
RT_Info *temp_info = 0; // temporary pointer to the caller's RT_Info
@@ -364,12 +416,6 @@ void ACE_DynScheduler::export(RT_Info& info, FILE* file)
}
-// TBD - we'll need to update this to use the information aggregated
-// within the task entry pointed to by the RT_Info's volatile_token
-// ACT (in fact, there is now more than one
-// priority assignment per RT_Info, w/ disjunction on multiple
-// priority levels, rates, etc. - iterate through and show each dispatch)
-
(void) ACE_OS::fprintf (file, "# end calls\n%d\n%d\n%d\n\n",
info.priority,
info.dynamic_subpriority,
diff --git a/TAO/orbsvcs/orbsvcs/Sched/DynSched.h b/TAO/orbsvcs/orbsvcs/Sched/DynSched.h
index aa811987a7a..5c8d59b5cb1 100644
--- a/TAO/orbsvcs/orbsvcs/Sched/DynSched.h
+++ b/TAO/orbsvcs/orbsvcs/Sched/DynSched.h
@@ -172,27 +172,21 @@ public:
// = Access a thread priority.
-// TBD - put this back in, but with dynamic subpriority as well as static
-// int priority (const handle_t handle,
-// OS_Priority &OS_priority,
-// Preemption_Priority &preemption_priority,
-// Sub_Priority &dynamic_subpriority,
-// Sub_Priority &static_subpriority);
- // Defines "priority" as the priority that was assigned to the Task that
- // was assigned "handle". Defines "dynamic subpriority" as the strategy
- // specific assignment of dynamic subpriority within a priority level, and
- // "static subpriority" as the minimal importance and topological ordering.
- // Returns 0 on success, or -1 if an invalid handle was supplied.
- // Queue numbers are platform-independent priority values, ranging from
- // a highest priority value of 0 to the lowest priority value, which is
- // returned by "minimum_priority_queue ()".
+ virtual int priority (const handle_t handle,
+ OS_Priority &priority,
+ Sub_Priority &subpriority,
+ Preemption_Priority &preemption_prio);
+ // "priority" is the OS thread priority that was assigned to the Task that
+ // was assigned "handle". "subpriority" combines the dynamic and static
+ // subpriorities of the Task that was assigned handle. "preemption_prio"
+ // is a platform-independent priority queue number, ranging from a
+ // highest priority value of 0 to the lowest priority value, which is
+ // returned by "minimum_priority_queue ()". Returns 0 on success,
+ // or -1 if an invalid handle was supplied.
// = Access the platform-independent priority value of the lowest-priority
// thread.
-
Preemption_Priority minimum_priority_queue () const;
- // This is intended for use by the Event Channel, so it can determine the
- // number of priority dispatch queues to create.
// = Access the number of tasks.
u_int tasks () const;
@@ -218,7 +212,6 @@ public:
static int number_of_dependencies(RT_Info* rt_info);
static int number_of_dependencies(RT_Info& rt_info);
- // TBD - modify these to take a Task_Entry and show all its dispatches
static void export(RT_Info*, FILE* file);
static void export(RT_Info&, FILE* file);
diff --git a/TAO/orbsvcs/orbsvcs/Sched/Scheduler.h b/TAO/orbsvcs/orbsvcs/Sched/Scheduler.h
index 8cd1cd53054..9f22254088e 100644
--- a/TAO/orbsvcs/orbsvcs/Sched/Scheduler.h
+++ b/TAO/orbsvcs/orbsvcs/Sched/Scheduler.h
@@ -47,6 +47,8 @@ public:
typedef RtecScheduler::OS_Priority OS_Thread_Priority;
typedef RtecScheduler::Sub_Priority Sub_Priority;
typedef RtecScheduler::RT_Info RT_Info;
+ typedef RtecScheduler::Time Time;
+
// Map some types to simplify re-use.
typedef const char *Object_Name;
@@ -164,7 +166,9 @@ public:
// Returns 0 on success, or -1 if an invalid mode or handle are supplied.
// Queue numbers are platform-independent priority values, ranging from
// a highest priority value of 0 to the lowest priority value, which is
- // returned by "minimum_priority_queue ()".
+ // returned by "minimum_priority_queue ()". The current and deadline times
+ // are part of the scheduling service implementation interface, but may be
+ // ignored by some implementations and used by others.
// = Access the platform-independent priority value of the lowest-priority
// thread.
diff --git a/TAO/orbsvcs/orbsvcs/Sched/Strategy_Scheduler.cpp b/TAO/orbsvcs/orbsvcs/Sched/Strategy_Scheduler.cpp
index dd840d8a83c..6bf1ec951fb 100644
--- a/TAO/orbsvcs/orbsvcs/Sched/Strategy_Scheduler.cpp
+++ b/TAO/orbsvcs/orbsvcs/Sched/Strategy_Scheduler.cpp
@@ -82,6 +82,13 @@ ACE_Strategy_Scheduler::assign_priorities (Dispatch_Entry **dispatches,
// value the OS and scheduler priorities in 0th dispatch entry
dispatches[0]->OS_priority (current_OS_priority);
dispatches[0]->priority (current_scheduler_priority);
+ // set OS priority and Scheduler priority of underlying RT_Info
+ // TBD - assign values into a map of priorities and RT_Infos:
+ // an RT_Info can be dispatched at multiple priorities
+ dispatches [0]->task_entry ().rt_info ()->priority =
+ current_OS_priority;
+ dispatches [0]->task_entry ().rt_info ()->preemption_priority =
+ current_scheduler_priority;
// traverse ordered dispatch entry array, assigning priority
// (array is sorted from highest to lowest priority)
@@ -142,6 +149,14 @@ ACE_Strategy_Scheduler::assign_priorities (Dispatch_Entry **dispatches,
// set scheduler priority of the current dispatch entry
dispatches[i]->priority (current_scheduler_priority);
+
+ // set OS priority and Scheduler priority of underlying RT_Info
+ // TBD - assign values into a map of priorities and RT_Infos:
+ // an RT_Info can be dispatched at multiple priorities
+ dispatches [i]->task_entry ().rt_info ()->priority =
+ current_OS_priority;
+ dispatches [i]->task_entry ().rt_info ()->preemption_priority =
+ current_scheduler_priority;
}
return status;
@@ -159,35 +174,56 @@ ACE_Strategy_Scheduler::assign_subpriorities (Dispatch_Entry **dispatches,
Sub_Priority static_subpriority_level = 0;
u_int dynamic_subpriority_elements = 1;
u_int static_subpriority_elements = 1;
- dispatches[0]->dynamic_subpriority (dynamic_subpriority_level);
- dispatches[0]->static_subpriority (static_subpriority_level++);
+ dispatches [0]->dynamic_subpriority (dynamic_subpriority_level);
+ dispatches [0]->static_subpriority (static_subpriority_level);
+
+ // set dynamic and static subpriority of underlying RT_Info
+ // TBD - assign values into a map of priorities and RT_Infos:
+ // an RT_Info can be dispatched at multiple priorities
+ dispatches [0]->task_entry ().rt_info ()->dynamic_subpriority =
+ dynamic_subpriority_level;
+ dispatches [0]->task_entry ().rt_info ()->static_subpriority =
+ static_subpriority_level;
+
+ // advance the static subpriority level
+ static_subpriority_level++;
u_int i,j;
// traverse ordered dispatch entry array, assigning priority
// (array is sorted from highest to lowest priority)
for (i = 1; i < count; ++i)
{
- switch (strategy_.priority_comp (*(dispatches[i-1]),
- *(dispatches[i])))
+ switch (strategy_.priority_comp (*(dispatches [i-1]),
+ *(dispatches [i])))
{
case -1: // the current entry is at lower priority than the previous
- {
+ {
// fill in the high to low dynamic subpriority values by subtracting
// the previously assigned subpriority value of each of element in the
// current priority level from the value of last subpriority level
for (j = 1; j <= dynamic_subpriority_elements; ++j)
{
- dispatches[i - j]->
+ dispatches [i - j]->
dynamic_subpriority (dynamic_subpriority_level -
- dispatches[i - j]->
- dynamic_subpriority ());
+ dispatches [i - j]-> dynamic_subpriority ());
+
+ // set dynamic subpriority of underlying RT_Info
+ // TBD - assign values into a map of priorities and RT_Infos:
+ // an RT_Info can be dispatched at multiple priorities
+ dispatches [i - j]->task_entry ().rt_info ()->dynamic_subpriority =
+ dispatches [i - j]-> dynamic_subpriority ();
}
for (j = 1; j <= static_subpriority_elements; ++j)
{
- dispatches[i - j]->
+ dispatches [i - j]->
static_subpriority (static_subpriority_level -
- dispatches[i - j]->
- static_subpriority () - 1);
+ dispatches [i - j]-> static_subpriority () - 1);
+
+ // set static subpriority of underlying RT_Info
+ // TBD - assign values into a map of priorities and RT_Infos:
+ // an RT_Info can be dispatched at multiple priorities
+ dispatches [i - j]->task_entry ().rt_info ()->static_subpriority =
+ dispatches [i - j]-> static_subpriority ();
}
// reset the subpriority counters, set these values in the
@@ -196,11 +232,22 @@ ACE_Strategy_Scheduler::assign_subpriorities (Dispatch_Entry **dispatches,
static_subpriority_elements = 1;
dynamic_subpriority_level = 0;
static_subpriority_level = 0;
- dispatches[i]->dynamic_subpriority (dynamic_subpriority_level);
- dispatches[i]->static_subpriority (static_subpriority_level++);
+ dispatches [i]->dynamic_subpriority (dynamic_subpriority_level);
+ dispatches [i]->static_subpriority (static_subpriority_level);
+
+ // set dynamic and static subpriority of underlying RT_Info
+ // TBD - assign values into a map of priorities and RT_Infos:
+ // an RT_Info can be dispatched at multiple priorities
+ dispatches [i]->task_entry ().rt_info ()->dynamic_subpriority =
+ dynamic_subpriority_level;
+ dispatches [i]->task_entry ().rt_info ()->static_subpriority =
+ static_subpriority_level;
+
+ // advance the static subpriority level
+ static_subpriority_level++;
break;
- }
+ }
case 0: // still at the same priority level
@@ -217,8 +264,14 @@ ACE_Strategy_Scheduler::assign_subpriorities (Dispatch_Entry **dispatches,
// with non-determinism if due to run-time conditions, two
// dispatches line up with identical dynamic subpriority that
// were considered different with respect to the critical instant
- dispatches[i]->static_subpriority (static_subpriority_level++);
+ dispatches [i]->static_subpriority (static_subpriority_level);
+ // TBD - assign values into a map of priorities and RT_Infos:
+ // an RT_Info can be dispatched at multiple priorities
+ dispatches [i]->task_entry ().rt_info ()->static_subpriority =
+ static_subpriority_level;
+ static_subpriority_level++;
static_subpriority_elements++;
+
break;
case 0: // still at the same dynamic subpriority level
@@ -236,7 +289,12 @@ ACE_Strategy_Scheduler::assign_subpriorities (Dispatch_Entry **dispatches,
// one anyway, to give a completely deterministic schedule
// even if the dynamic subpriorities happen to align due to
// run-time variation
- dispatches[i]->static_subpriority (static_subpriority_level++);
+ dispatches [i]->static_subpriority (static_subpriority_level);
+ // TBD - assign values into a map of priorities and RT_Infos:
+ // an RT_Info can be dispatched at multiple priorities
+ dispatches [i]->task_entry ().rt_info ()->static_subpriority =
+ static_subpriority_level;
+ static_subpriority_level++;
static_subpriority_elements++;
break;
@@ -246,8 +304,8 @@ ACE_Strategy_Scheduler::assign_subpriorities (Dispatch_Entry **dispatches,
LM_ERROR,
"Static subpriority assignment failure: tasks"
" \"%s\" and \"%s\" are out of order.\n",
- dispatches[i-1]->task_entry ().rt_info ()->entry_point.in (),
- dispatches[i]->task_entry ().rt_info ()->entry_point.in ()),
+ dispatches [i-1]->task_entry ().rt_info ()->entry_point.in (),
+ dispatches [i]->task_entry ().rt_info ()->entry_point.in ()),
ACE_DynScheduler::ST_INVALID_PRIORITY_ORDERING);
}
@@ -260,13 +318,19 @@ ACE_Strategy_Scheduler::assign_subpriorities (Dispatch_Entry **dispatches,
LM_ERROR,
"Dynamic subpriority assignment failure: tasks"
" \"%s\" and \"%s\" are out of order.\n",
- dispatches[i-1]->task_entry ().rt_info ()->entry_point.in (),
- dispatches[i]->task_entry ().rt_info ()->entry_point.in ()),
+ dispatches [i-1]->task_entry ().rt_info ()->entry_point.in (),
+ dispatches [i]->task_entry ().rt_info ()->entry_point.in ()),
ACE_DynScheduler::ST_INVALID_PRIORITY_ORDERING);
}
- dispatches[i]->dynamic_subpriority (dynamic_subpriority_level);
- dynamic_subpriority_elements++;
+ dispatches [i]->dynamic_subpriority (dynamic_subpriority_level);
+ // TBD - assign values into a map of priorities and RT_Infos:
+ // an RT_Info can be dispatched at multiple priorities
+ dispatches [i]->task_entry ().rt_info ()->dynamic_subpriority =
+ dynamic_subpriority_level;
+
+ dynamic_subpriority_elements++;
+
break;
default: // should never reach here: something *bad* has happened
@@ -275,8 +339,8 @@ ACE_Strategy_Scheduler::assign_subpriorities (Dispatch_Entry **dispatches,
LM_ERROR,
"Priority assignment failure: tasks"
" \"%s\" and \"%s\" are out of order.\n",
- dispatches[i-1]->task_entry ().rt_info ()->entry_point.in (),
- dispatches[i]->task_entry ().rt_info ()->entry_point.in ()),
+ dispatches [i-1]->task_entry ().rt_info ()->entry_point.in (),
+ dispatches [i]->task_entry ().rt_info ()->entry_point.in ()),
ACE_DynScheduler::ST_INVALID_PRIORITY_ORDERING);
}
}
@@ -286,15 +350,25 @@ ACE_Strategy_Scheduler::assign_subpriorities (Dispatch_Entry **dispatches,
// the total number of subpriorities
for (j = 1; j <= dynamic_subpriority_elements; ++j)
{
- dispatches[i - j]->
+ dispatches [i - j]->
dynamic_subpriority (dynamic_subpriority_level -
- dispatches[i - j]->dynamic_subpriority ());
+ dispatches [i - j]->dynamic_subpriority ());
+
+ // TBD - assign values into a map of priorities and RT_Infos:
+ // an RT_Info can be dispatched at multiple priorities
+ dispatches [i - j]->task_entry ().rt_info ()->dynamic_subpriority =
+ dispatches [i - j]->dynamic_subpriority ();
}
for (j = 1; j <= static_subpriority_elements; ++j)
{
- dispatches[i - j]->
+ dispatches [i - j]->
static_subpriority (static_subpriority_level -
- dispatches[i - j]->static_subpriority () - 1);
+ dispatches [i - j]->static_subpriority () - 1);
+
+ // TBD - assign values into a map of priorities and RT_Infos:
+ // an RT_Info can be dispatched at multiple priorities
+ dispatches [i - j]->task_entry ().rt_info ()->static_subpriority =
+ dispatches [i - j]->static_subpriority ();
}
return ACE_DynScheduler::SUCCEEDED;
@@ -476,9 +550,8 @@ ACE_Strategy_Scheduler::schedule_timeline_entry (
// class template ACE_Strategy_Scheduler_Factory member functions //
////////////////////////////////////////////////////////////////////
-template <class STRATEGY>
-ACE_Strategy_Scheduler *
-ACE_Strategy_Scheduler_Factory<STRATEGY>::create (ACE_DynScheduler::Preemption_Priority minimum_critical_priority)
+template <class STRATEGY> ACE_Strategy_Scheduler *
+ACE_Strategy_Scheduler_Factory<STRATEGY>::create (RtecScheduler::Preemption_Priority minimum_critical_priority)
{
ACE_Strategy_Scheduler *the_scheduler = 0;
STRATEGY *the_strategy;
@@ -1209,6 +1282,118 @@ ACE_RMS_Dyn_Scheduler_Strategy::minimum_critical_priority ()
// = returns 0 for minimum critical priority number
+/////////////////////////////////////////////
+// Runtime Dispatch Subpriority Strategies //
+/////////////////////////////////////////////
+
+ACE_Dispatch_Subpriority_Strategy::ACE_Dispatch_Subpriority_Strategy (long frame_size)
+ : frame_size_ (frame_size)
+ , dynamic_max_ (LONG_MAX)
+ , static_max_ (0)
+ , static_bits_ (0)
+{
+ // some platforms don't support floating point numbers, so compute delimiters
+ // for static and dynamic subpriority representations the long way (once)
+ long doubler = 1;
+ while ((dynamic_max_ / 2) > frame_size)
+ {
+ dynamic_max_ /= 2;
+ doubler *= 2;
+ static_max_ = doubler - 1;
+ ++static_bits_;
+ }
+
+ max_time_.set (0, dynamic_max_);
+ min_time_.set (0, - dynamic_max_ - 1);
+}
+
+
+RtecScheduler::Sub_Priority
+ACE_Dispatch_Subpriority_Strategy::response_function (
+ const ACE_Time_Value &time_metric,
+ RtecScheduler::Sub_Priority static_subpriority)
+{
+ RtecScheduler::Sub_Priority dynamic_subpriority;
+
+ if (time_metric < min_time_)
+ {
+ dynamic_subpriority = - dynamic_max_ - 1;
+ static_subpriority = static_max_;
+ }
+ else if (time_metric > max_time_)
+ {
+ dynamic_subpriority = dynamic_max_;
+ static_subpriority = static_max_;
+ }
+ else
+ {
+ dynamic_subpriority = time_metric.usec () +
+ time_metric.sec () * ACE_ONE_SECOND_IN_USECS;
+
+ if (static_subpriority > static_max_)
+ {
+ static_subpriority = static_max_;
+ }
+ }
+
+ return (dynamic_subpriority > 0)
+ ? (LONG_MAX -
+ (dynamic_subpriority << static_bits_) -
+ static_subpriority)
+ : (LONG_MIN +
+ ((-dynamic_subpriority) << static_bits_) +
+ static_subpriority);
+}
+
+
+ACE_Deadline_Subpriority_Strategy::ACE_Deadline_Subpriority_Strategy (long frame_size)
+ : ACE_Dispatch_Subpriority_Strategy (frame_size)
+{
+}
+
+RtecScheduler::Sub_Priority
+ACE_Deadline_Subpriority_Strategy::runtime_subpriority (
+ const ACE_Time_Value &current_time,
+ const ACE_Time_Value &deadline_time,
+ const ACE_Time_Value &execution_time,
+ RtecScheduler::Sub_Priority static_subpriority)
+{
+ ACE_Time_Value time_to_deadline (deadline_time);
+ time_to_deadline -= current_time;
+
+ return response_function (time_to_deadline, static_subpriority);
+}
+
+ACE_Laxity_Subpriority_Strategy::ACE_Laxity_Subpriority_Strategy (long frame_size)
+ : ACE_Dispatch_Subpriority_Strategy (frame_size)
+{
+}
+
+RtecScheduler::Sub_Priority
+ACE_Laxity_Subpriority_Strategy::runtime_subpriority (
+ const ACE_Time_Value &current_time,
+ const ACE_Time_Value &deadline_time,
+ const ACE_Time_Value &execution_time,
+ RtecScheduler::Sub_Priority static_subpriority)
+{
+ ACE_Time_Value laxity (deadline_time);
+ laxity -= current_time;
+ laxity -= execution_time;
+
+ return response_function (laxity, static_subpriority);
+}
+
+RtecScheduler::Sub_Priority
+ACE_Static_Subpriority_Strategy::runtime_subpriority (
+ const ACE_Time_Value &current_time,
+ const ACE_Time_Value &deadline_time,
+ const ACE_Time_Value &execution_time,
+ RtecScheduler::Sub_Priority static_subpriority)
+{
+ // map passed static subpriority directly to dispatch subpriority
+ return static_subpriority;
+}
+
#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
template class ACE_Node<Dispatch_Entry *>;
diff --git a/TAO/orbsvcs/orbsvcs/Sched/Strategy_Scheduler.h b/TAO/orbsvcs/orbsvcs/Sched/Strategy_Scheduler.h
index c7977092167..60051a4f5a2 100644
--- a/TAO/orbsvcs/orbsvcs/Sched/Strategy_Scheduler.h
+++ b/TAO/orbsvcs/orbsvcs/Sched/Strategy_Scheduler.h
@@ -93,7 +93,7 @@ class ACE_Strategy_Scheduler_Factory
{
public:
- static ACE_Strategy_Scheduler * create (ACE_DynScheduler::Preemption_Priority minimum_critical_priority);
+ static ACE_Strategy_Scheduler * create (RtecScheduler::Preemption_Priority minimum_critical_priority);
// construct and return a scheduler strategized with
// an instance of the the parameterized strategy type
};
@@ -465,6 +465,103 @@ private:
};
+/////////////////////////////////////////////
+// Runtime Dispatch Subpriority Strategies //
+/////////////////////////////////////////////
+
+class TAO_ORBSVCS_Export ACE_Dispatch_Subpriority_Strategy
+{
+public:
+
+ ACE_Dispatch_Subpriority_Strategy (long frame_size = ACE_ONE_SECOND_IN_USECS);
+ // ctor: frame size is the number of microseconds in a complete
+ // dispatch frame (defaults to one million = one second).
+
+ virtual RtecScheduler::Sub_Priority
+ runtime_subpriority (const ACE_Time_Value &current_time,
+ const ACE_Time_Value &deadline_time,
+ const ACE_Time_Value &execution_time,
+ RtecScheduler::Sub_Priority static_subpriority) = 0;
+ // abstract method to compute the dispatch subpriority for an operation
+
+ virtual RtecScheduler::Sub_Priority
+ response_function (const ACE_Time_Value &time_metric,
+ RtecScheduler::Sub_Priority static_subpriority);
+ // response function for run time subpriority: stepwise linear function that
+ // gives appoximately the same dispatching behavior as a hyperbolic function,
+ // but does not require us to use floating point math.
+
+
+protected:
+
+ long frame_size_;
+ // number of microseconds per scheduling frame
+
+ long dynamic_max_;
+ // max value that a dynamic priority representation can have
+
+ long static_max_;
+ // number of bits available for static subpriority representation
+
+ u_int static_bits_;
+ // number of bits available for static subpriority representation
+
+ ACE_Time_Value max_time_;
+ // maximum time value that can be represented
+
+ ACE_Time_Value min_time_;
+ // minimum time value that can be represented
+
+};
+
+
+class TAO_ORBSVCS_Export ACE_Deadline_Subpriority_Strategy
+ : public ACE_Dispatch_Subpriority_Strategy
+{
+public:
+
+ ACE_Deadline_Subpriority_Strategy (long frame_size = ACE_ONE_SECOND_IN_USECS);
+ // ctor: frame size is the number of microseconds in a complete
+ // dispatch frame (defaults to one million = one second).
+
+
+ virtual RtecScheduler::Sub_Priority
+ runtime_subpriority (const ACE_Time_Value &current_time,
+ const ACE_Time_Value &deadline_time,
+ const ACE_Time_Value &execution_time,
+ RtecScheduler::Sub_Priority static_subpriority);
+};
+
+class TAO_ORBSVCS_Export ACE_Laxity_Subpriority_Strategy
+ : public ACE_Dispatch_Subpriority_Strategy
+{
+public:
+
+ ACE_Laxity_Subpriority_Strategy (long frame_size = ACE_ONE_SECOND_IN_USECS);
+ // ctor: frame size is the number of microseconds in a complete
+ // dispatch frame (defaults to one million = one second).
+
+
+ virtual RtecScheduler::Sub_Priority
+ runtime_subpriority (const ACE_Time_Value &current_time,
+ const ACE_Time_Value &deadline_time,
+ const ACE_Time_Value &execution_time,
+ RtecScheduler::Sub_Priority static_subpriority);
+};
+
+class TAO_ORBSVCS_Export ACE_Static_Subpriority_Strategy
+ : public ACE_Dispatch_Subpriority_Strategy
+{
+public:
+
+ virtual RtecScheduler::Sub_Priority
+ runtime_subpriority (const ACE_Time_Value &current_time,
+ const ACE_Time_Value &deadline_time,
+ const ACE_Time_Value &execution_time,
+ RtecScheduler::Sub_Priority static_subpriority);
+};
+
+
#if defined (__ACE_INLINE__)
#include "Strategy_Scheduler.i"
#endif /* __ACE_INLINE__ */
diff --git a/TAO/orbsvcs/orbsvcs/orbsvcs.dsp b/TAO/orbsvcs/orbsvcs/orbsvcs.dsp
index b9525844db8..694136a2ab8 100644
--- a/TAO/orbsvcs/orbsvcs/orbsvcs.dsp
+++ b/TAO/orbsvcs/orbsvcs/orbsvcs.dsp
@@ -142,6 +142,10 @@ SOURCE=.\Event\Dispatching_Modules.cpp
# End Source File
# Begin Source File
+SOURCE=.\Sched\DynSched.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\Event\EC_Gateway.cpp
# End Source File
# Begin Source File
@@ -222,6 +226,10 @@ SOURCE=.\Runtime_Scheduler.cpp
# End Source File
# Begin Source File
+SOURCE=.\Sched\SchedEntry.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\Sched\Scheduler.cpp
# End Source File
# Begin Source File
@@ -238,6 +246,10 @@ SOURCE=.\Scheduler_Utilities.cpp
# End Source File
# Begin Source File
+SOURCE=.\Sched\Strategy_Scheduler.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\Event\Task_Manager.cpp
# End Source File
# Begin Source File
@@ -290,6 +302,10 @@ SOURCE=.\Event\Dispatching_Modules.h
# End Source File
# Begin Source File
+SOURCE=.\Sched\DynSched.h
+# End Source File
+# Begin Source File
+
SOURCE=.\Event\EC_Gateway.h
# End Source File
# Begin Source File
@@ -370,6 +386,10 @@ SOURCE=.\Runtime_Scheduler.h
# End Source File
# Begin Source File
+SOURCE=.\Sched\SchedEntry.h
+# End Source File
+# Begin Source File
+
SOURCE=.\Sched\Scheduler.h
# End Source File
# Begin Source File
@@ -386,6 +406,10 @@ SOURCE=.\Scheduler_Utilities.h
# End Source File
# Begin Source File
+SOURCE=.\Sched\Strategy_Scheduler.h
+# End Source File
+# Begin Source File
+
SOURCE=.\Event\Task_Manager.h
# End Source File
# Begin Source File
@@ -426,12 +450,24 @@ SOURCE=.\Event\Dispatching_Modules.i
# End Source File
# Begin Source File
+SOURCE=.\Sched\DynSched.i
+# End Source File
+# Begin Source File
+
SOURCE=.\Event\Event_Channel.i
# End Source File
# Begin Source File
SOURCE=.\Event_Utilities.i
# End Source File
+# Begin Source File
+
+SOURCE=.\Sched\SchedEntry.i
+# End Source File
+# Begin Source File
+
+SOURCE=.\Sched\Strategy_Scheduler.i
+# End Source File
# End Group
# Begin Group "IDL Files"
@@ -450,7 +486,7 @@ InputName=CosLifeCycle
BuildCmds= \
..\..\tao_idl\tao_idl -Wb,export_macro=TAO_ORBSVCS_Export\
- -Wb,export_include=orbsvcs_export.h $(InputName).idl
+ -Wb,export_include=orbsvcs_export.h $(InputName).idl
"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
@@ -486,7 +522,7 @@ InputName=CosNaming
BuildCmds= \
..\..\tao_idl\tao_idl -Wb,export_macro=TAO_ORBSVCS_Export\
- -Wb,export_include=orbsvcs_export.h $(InputName).idl
+ -Wb,export_include=orbsvcs_export.h $(InputName).idl
"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
@@ -515,7 +551,7 @@ InputName=CosNaming
BuildCmds= \
..\..\tao_idl\tao_idl -Wb,export_macro=TAO_ORBSVCS_Export\
- -Wb,export_include=orbsvcs_export.h $(InputName).idl
+ -Wb,export_include=orbsvcs_export.h $(InputName).idl
"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
@@ -551,7 +587,7 @@ InputName=CosTimeBase
BuildCmds= \
..\..\tao_idl\tao_idl -Wb,export_macro=TAO_ORBSVCS_Export\
- -Wb,export_include=orbsvcs_export.h $(InputName).idl
+ -Wb,export_include=orbsvcs_export.h $(InputName).idl
"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
@@ -580,7 +616,7 @@ InputName=CosTimeBase
BuildCmds= \
..\..\tao_idl\tao_idl -Wb,export_macro=TAO_ORBSVCS_Export\
- -Wb,export_include=orbsvcs_export.h $(InputName).idl
+ -Wb,export_include=orbsvcs_export.h $(InputName).idl
"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
@@ -616,7 +652,7 @@ InputName=Logger
BuildCmds= \
..\..\tao_idl\tao_idl -Wb,export_macro=TAO_ORBSVCS_Export\
- -Wb,export_include=orbsvcs_export.h $(InputName).idl
+ -Wb,export_include=orbsvcs_export.h $(InputName).idl
"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
@@ -645,7 +681,7 @@ InputName=Logger
BuildCmds= \
..\..\tao_idl\tao_idl -Wb,export_macro=TAO_ORBSVCS_Export\
- -Wb,export_include=orbsvcs_export.h $(InputName).idl
+ -Wb,export_include=orbsvcs_export.h $(InputName).idl
"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
@@ -681,7 +717,7 @@ InputName=RtecEventChannelAdmin
BuildCmds= \
..\..\tao_idl\tao_idl -Wb,export_macro=TAO_ORBSVCS_Export\
- -Wb,export_include=orbsvcs_export.h $(InputName).idl
+ -Wb,export_include=orbsvcs_export.h $(InputName).idl
"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
@@ -710,7 +746,7 @@ InputName=RtecEventChannelAdmin
BuildCmds= \
..\..\tao_idl\tao_idl -Wb,export_macro=TAO_ORBSVCS_Export\
- -Wb,export_include=orbsvcs_export.h $(InputName).idl
+ -Wb,export_include=orbsvcs_export.h $(InputName).idl
"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
@@ -746,7 +782,7 @@ InputName=RtecEventComm
BuildCmds= \
..\..\tao_idl\tao_idl -Wb,export_macro=TAO_ORBSVCS_Export\
- -Wb,export_include=orbsvcs_export.h $(InputName).idl
+ -Wb,export_include=orbsvcs_export.h $(InputName).idl
"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
@@ -775,7 +811,7 @@ InputName=RtecEventComm
BuildCmds= \
..\..\tao_idl\tao_idl -Wb,export_macro=TAO_ORBSVCS_Export\
- -Wb,export_include=orbsvcs_export.h $(InputName).idl
+ -Wb,export_include=orbsvcs_export.h $(InputName).idl
"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
@@ -811,7 +847,7 @@ InputName=RtecScheduler
BuildCmds= \
..\..\tao_idl\tao_idl -Wb,export_macro=TAO_ORBSVCS_Export\
- -Wb,export_include=orbsvcs_export.h $(InputName).idl
+ -Wb,export_include=orbsvcs_export.h $(InputName).idl
"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
@@ -840,7 +876,7 @@ InputName=RtecScheduler
BuildCmds= \
..\..\tao_idl\tao_idl -Wb,export_macro=TAO_ORBSVCS_Export\
- -Wb,export_include=orbsvcs_export.h $(InputName).idl
+ -Wb,export_include=orbsvcs_export.h $(InputName).idl
"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
diff --git a/ace/ace_dll.dsp b/ace/ace_dll.dsp
index d72a36774ac..13b639306f8 100644
--- a/ace/ace_dll.dsp
+++ b/ace/ace_dll.dsp
@@ -5806,6 +5806,29 @@ NODEP_CPP_PROFI=\
# End Source File
# Begin Source File
+SOURCE=.\RB_Tree.cpp
+
+!IF "$(CFG)" == "ACE dynamic library - Win32 Debug"
+
+!ELSEIF "$(CFG)" == "ACE dynamic library - Win32 Release"
+
+!ELSEIF "$(CFG)" == "ACE dynamic library - Win32 Unicode Debug"
+
+!ELSEIF "$(CFG)" == "ACE dynamic library - Win32 Unicode Release"
+
+!ELSEIF "$(CFG)" == "ACE dynamic library - Win32 Alpha Debug"
+
+!ELSEIF "$(CFG)" == "ACE dynamic library - Win32 Alpha Release"
+
+!ELSEIF "$(CFG)" == "ACE dynamic library - Win32 Alpha Unicode Debug"
+
+!ELSEIF "$(CFG)" == "ACE dynamic library - Win32 Alpha Unicode Release"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
SOURCE=.\Reactor.cpp
!IF "$(CFG)" == "ACE dynamic library - Win32 Debug"
@@ -12509,6 +12532,10 @@ SOURCE=.\Profile_Timer.h
# End Source File
# Begin Source File
+SOURCE=.\RB_Tree.h
+# End Source File
+# Begin Source File
+
SOURCE=.\Reactor.h
# End Source File
# Begin Source File
@@ -13113,6 +13140,10 @@ SOURCE=.\Profile_Timer.i
# End Source File
# Begin Source File
+SOURCE=.\RB_Tree.i
+# End Source File
+# Begin Source File
+
SOURCE=.\Reactor.i
# End Source File
# Begin Source File