summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TAO/ChangeLog17
-rw-r--r--TAO/tao/TAO_Internal.cpp28
2 files changed, 39 insertions, 6 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index 48cd294c192..c15372120db 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,3 +1,20 @@
+Wed Aug 22 20:27:35 UTC 2007 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/TAO_Internal.cpp:
+ Since adding the -ORBGestalt Local option, with a default of
+ using the global service context, it turns out that service
+ directives passed explicitly on the command line using
+ -ORBSvcConfDirective weren't being processed. The problem is
+ that these directives were considered "private" to the ORB that
+ was being initialized and stored separately to be procesed by
+ the ORB's local configuration context. But now that ORBs may be
+ using the global context exclusively, these "private" directives
+ need to be passed to the service configurator along with all the
+ rest. Having done this means that calling ORB_init more a second
+ time with -ORBSvcConf... arguments will see those arguments
+ ignored. This is the way it worked before ORB-specific
+ configuration was defined.
+
Tue Aug 21 19:47:26 UTC 2007 Phil Mesnier <mesnier_p@ociweb.com>
* orbsvcs/tests/HTIOP/Hello/run_test.pl:
diff --git a/TAO/tao/TAO_Internal.cpp b/TAO/tao/TAO_Internal.cpp
index c617d27024e..a55ed696ab4 100644
--- a/TAO/tao/TAO_Internal.cpp
+++ b/TAO/tao/TAO_Internal.cpp
@@ -313,6 +313,17 @@ TAO::ORB::open_services (ACE_Service_Gestalt* pcfg,
return -1;
}
+ // If the target configuration happens to be the global context,
+ // add any 'private' arguments here.
+ if (pcfg == theone && svc_config_argv.length() > 1)
+ {
+ CORBA::ULong glen = global_svc_config_argv.length();
+ global_svc_config_argv.length(glen + svc_config_argv.length() - 1);
+ for (CORBA::ULong i = 1; i < svc_config_argv.length(); i++)
+ global_svc_config_argv[glen++] = svc_config_argv[i];
+ svc_config_argv.length(1);
+ }
+
int global_svc_config_argc = global_svc_config_argv.length ();
int status =
open_private_services_i (theone,
@@ -381,12 +392,17 @@ TAO::ORB::open_services (ACE_Service_Gestalt* pcfg,
return -1;
}
- int svc_config_argc = svc_config_argv.length ();
- int status =
- open_private_services_i (pcfg,
- svc_config_argc,
- svc_config_argv.get_buffer (),
- skip_service_config_open);
+ int status = 0;
+ // only open the private context if it is not also the global context
+ if (pcfg != ACE_Service_Config::global())
+ {
+ int svc_config_argc = svc_config_argv.length ();
+ status =
+ open_private_services_i (pcfg,
+ svc_config_argc,
+ svc_config_argv.get_buffer (),
+ skip_service_config_open);
+ }
if (status >= 0)
{