diff options
-rw-r--r-- | TAO/ChangeLog | 17 | ||||
-rw-r--r-- | TAO/tao/TAO_Internal.cpp | 28 |
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) { |