Functions | |
void | init_orb_globals (void) |
int | open_services (ACE_Service_Gestalt *cfg, int &argc, ACE_TCHAR **argv) |
int | close_services (ACE_Service_Gestalt *pcfg) |
void | default_svc_conf_entries (char const *rf_args, char const *ssf_args, char const *csf_args) |
|
The complement to
Definition at line 422 of file TAO_Internal.cpp. References ACE_GUARD_RETURN, ACE_Service_Gestalt::close(), ACE_Service_Config::global(), service_open_count, and TAO_SYNCH_RECURSIVE_MUTEX. Referenced by TAO_ORB_Core::~TAO_ORB_Core().
00423 { 00424 ACE_MT (ACE_GUARD_RETURN (TAO_SYNCH_RECURSIVE_MUTEX, 00425 guard, 00426 *ACE_Static_Object_Lock::instance (), 00427 -1)); 00428 service_open_count--; 00429 00430 if (pcfg == ACE_Service_Config::global()) 00431 return 0; 00432 return pcfg->close (); 00433 } |
|
Set default Definition at line 436 of file TAO_Internal.cpp. References client_strategy_factory_args, resource_factory_args, and server_strategy_factory_args.
00439 { 00440 resource_factory_args = rf_args; 00441 server_strategy_factory_args = ssf_args; 00442 client_strategy_factory_args = csf_args; 00443 } |
|
Initialize the ORB globals correctly, i.e., only when they haven't been initialized yet. Definition at line 1059 of file ORB.cpp. References orb_init_count. Referenced by CORBA::ORB_init(), and PortableInterceptor::register_orb_initializer().
01060 { 01061 // This method should be invoked atomically. It is the caller's 01062 // responsibility to ensure that this condition is satisfied. 01063 01064 // Prevent multiple initializations. 01065 if (orb_init_count != 0) 01066 { 01067 return; 01068 } 01069 else 01070 { 01071 ++orb_init_count; 01072 } 01073 } |
|
Extract ACE Service Configurator arguments from the given argument vector, and initialize the ACE Service Configurator.
Definition at line 199 of file TAO_Internal.cpp. References ACE_CString, ACE_DEBUG, ACE_ERROR, ACE_ERROR_RETURN, ACE_GUARD_RETURN, ACE_TEXT, ACE_TEXT_ALWAYS_CHAR, ACE_Service_Config::global(), is_ubergestalt_ready, LM_DEBUG, open_private_services_i(), parse_global_args_i(), parse_private_args_i(), parse_svcconf_args_i(), register_additional_services_i(), register_global_services_i(), service_open_count, CORBA::StringSeq, TAO_debug_level, and TAO_SYNCH_RECURSIVE_MUTEX. Referenced by CORBA::ORB_init().
00202 { 00203 { 00204 ACE_MT (ACE_GUARD_RETURN (TAO_SYNCH_RECURSIVE_MUTEX, 00205 guard, 00206 TAO_Ubergestalt_Ready_Condition::instance ()->mutex (), 00207 -1)); 00208 00209 // Wait in line, while the default ORB (which isn't us) completes 00210 // initialization of the globaly required service objects 00211 if (service_open_count == 1) 00212 { 00213 if (TAO_debug_level > 4) 00214 ACE_DEBUG ((LM_DEBUG, 00215 ACE_TEXT ("TAO (%P|%t) Waiting for the default ") 00216 ACE_TEXT ("ORB to complete the global ") 00217 ACE_TEXT ("initialization\n"))); 00218 00219 ACE_MT (while (!is_ubergestalt_ready) 00220 TAO_Ubergestalt_Ready_Condition::instance ()->wait ()); 00221 00222 if (TAO_debug_level > 4) 00223 ACE_DEBUG ((LM_DEBUG, 00224 ACE_TEXT ("TAO (%P|%t) The default ") 00225 ACE_TEXT ("ORB must have completed the global ") 00226 ACE_TEXT ("initialization...\n"))); 00227 00228 } 00229 else 00230 { 00231 if (TAO_debug_level > 4) 00232 ACE_DEBUG ((LM_DEBUG, 00233 ACE_TEXT ("TAO (%P|%t) We are %sthe default ") 00234 ACE_TEXT ("ORB ...\n"), 00235 (service_open_count == 0) ? "" : "not ")); 00236 } 00237 00238 ++service_open_count; 00239 } 00240 00241 // Construct an argument vector specific to the Service 00242 // Configurator. 00243 CORBA::StringSeq svc_config_argv; 00244 00245 // Be certain to copy the program name so that service configurator 00246 // has something to skip! 00247 ACE_CString argv0 (""); 00248 00249 if (argc > 0 && argv != 0) 00250 { 00251 argv0 = ACE_TEXT_ALWAYS_CHAR (argv[0]); 00252 } 00253 00254 svc_config_argv.length (1); 00255 svc_config_argv[0] = argv0.c_str (); 00256 00257 // Should we skip the ACE_Service_Config::open() method, e.g., if we 00258 // already being configured by the ACE Service Configurator. 00259 // 00260 // @@ This is no longer needed since the Service Configurator is now 00261 // reentrant.(-Ossama) 00262 // @@ Leaving it in, since the -ORBSkipServiceConfigOpen is still 00263 // available. (-Iliyan) 00264 bool skip_service_config_open = false; 00265 00266 // Extract any ORB options from the argument vector. 00267 if (parse_private_args_i (argc, 00268 argv, 00269 svc_config_argv, 00270 skip_service_config_open) == -1) 00271 { 00272 return -1; 00273 } 00274 00275 // Construct an argument vector specific to the process-wide 00276 // (global) Service Configurator instance. 00277 CORBA::StringSeq global_svc_config_argv; 00278 00279 ACE_Service_Gestalt * theone = ACE_Service_Config::global (); 00280 00281 if (service_open_count == 1) 00282 { 00283 ACE_Service_Config_Guard config_guard (theone); 00284 00285 if (TAO_debug_level > 2) 00286 { 00287 ACE_DEBUG ((LM_DEBUG, 00288 ACE_TEXT ("TAO (%P|%t) Initializing the ") 00289 ACE_TEXT ("process-wide services\n"))); 00290 } 00291 00292 register_global_services_i (theone); 00293 00294 // Be certain to copy the program name so that service configurator 00295 // has something to skip! 00296 ACE_CString gargv0 (""); 00297 00298 if (argc > 0 && argv != 0) 00299 { 00300 gargv0 = ACE_TEXT_ALWAYS_CHAR (argv[0]); 00301 } 00302 00303 global_svc_config_argv.length (1); 00304 global_svc_config_argv[0] = gargv0.c_str (); 00305 00306 if (parse_global_args_i (argc, argv, global_svc_config_argv, true) == -1) 00307 { 00308 return -1; 00309 } 00310 00311 if (parse_svcconf_args_i (argc, argv, global_svc_config_argv) == -1) 00312 { 00313 return -1; 00314 } 00315 00316 // If the target configuration happens to be the global context, 00317 // add any 'private' arguments here. 00318 if (pcfg == theone && svc_config_argv.length() > 1) 00319 { 00320 CORBA::ULong glen = global_svc_config_argv.length(); 00321 global_svc_config_argv.length(glen + svc_config_argv.length() - 1); 00322 for (CORBA::ULong i = 1; i < svc_config_argv.length(); i++) 00323 global_svc_config_argv[glen++] = svc_config_argv[i]; 00324 svc_config_argv.length(1); 00325 } 00326 00327 int global_svc_config_argc = global_svc_config_argv.length (); 00328 int status = 00329 open_private_services_i (theone, 00330 global_svc_config_argc, 00331 global_svc_config_argv.get_buffer (), 00332 skip_service_config_open); 00333 00334 if (status == -1) 00335 { 00336 if (TAO_debug_level > 0) 00337 { 00338 ACE_ERROR ((LM_DEBUG, 00339 ACE_TEXT ("TAO (%P|%t) Failed to open process-") 00340 ACE_TEXT ("wide service configuration\n"))); 00341 } 00342 00343 return -1; 00344 } 00345 00346 register_additional_services_i (theone); 00347 00348 if (TAO_debug_level > 4) 00349 ACE_DEBUG ((LM_DEBUG, 00350 ACE_TEXT ("TAO (%P|%t) Default ORB - global ") 00351 ACE_TEXT ("initialization completed.\n"))); 00352 00353 // Notify all other threads that may be waiting, that the global 00354 // gestalt has been initialized. 00355 { 00356 ACE_MT (ACE_GUARD_RETURN (TAO_SYNCH_RECURSIVE_MUTEX, 00357 guard, 00358 TAO_Ubergestalt_Ready_Condition::instance ()->mutex (), 00359 -1)); 00360 00361 is_ubergestalt_ready = true; 00362 ACE_MT (if (TAO_Ubergestalt_Ready_Condition::instance ()-> 00363 broadcast () == -1) 00364 return -1); 00365 } 00366 00367 } 00368 else 00369 { 00370 int status = 00371 parse_global_args_i(argc, argv,global_svc_config_argv, false); 00372 if (status == -1 && TAO_debug_level > 0) 00373 ACE_DEBUG ((LM_DEBUG, 00374 ACE_TEXT ("TAO (%P|%t) Skipping the process-wide ") 00375 ACE_TEXT ("service configuration, service_open_count ") 00376 ACE_TEXT ("= %d, status = %d\n"), 00377 service_open_count, 00378 status)); 00379 } 00380 00381 if (TAO_debug_level > 2) 00382 { 00383 ACE_DEBUG ((LM_DEBUG, 00384 ACE_TEXT ("TAO (%P|%t) Initializing the ") 00385 ACE_TEXT ("orb-specific services\n"))); 00386 } 00387 00388 if (parse_svcconf_args_i (argc, argv, svc_config_argv) == -1) 00389 { 00390 return -1; 00391 } 00392 00393 int status = 0; 00394 // only open the private context if it is not also the global context 00395 if (pcfg != ACE_Service_Config::global()) 00396 { 00397 int svc_config_argc = svc_config_argv.length (); 00398 status = 00399 open_private_services_i (pcfg, 00400 svc_config_argc, 00401 svc_config_argv.get_buffer (), 00402 skip_service_config_open); 00403 } 00404 00405 if (status >= 0) 00406 { 00407 return 0; 00408 } 00409 00410 if (TAO_debug_level > 0) 00411 { 00412 ACE_ERROR_RETURN ((LM_DEBUG, 00413 ACE_TEXT ("TAO (%P|%t) Failed to ") 00414 ACE_TEXT ("open orb service configuration\n")), 00415 -1); 00416 } 00417 00418 return -1; 00419 } |