summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjeliazkov_i <jeliazkov_i@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-05-05 16:26:36 +0000
committerjeliazkov_i <jeliazkov_i@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-05-05 16:26:36 +0000
commit0c9d703e48ab8bb6bd5b9a7ebfd1129faf6089e9 (patch)
tree3722510b7f2f00af15511173bf6ad803e1d323c1
parent2ec31b7ad044dc661b4c91d2486d0758952e6727 (diff)
downloadATCD-0c9d703e48ab8bb6bd5b9a7ebfd1129faf6089e9.tar.gz
ChangeLogTag: Fri May 5 16:12:17 UTC 2006 Iliyan Jeliazkov <iliyan@ociweb.com>
-rw-r--r--TAO/ChangeLog12
-rw-r--r--TAO/tao/ORB_Core.cpp6
-rw-r--r--TAO/tao/TAO_Internal.cpp11
3 files changed, 25 insertions, 4 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index f61adac40b6..413e2b9a10f 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,3 +1,15 @@
+Fri May 5 16:12:17 UTC 2006 Iliyan Jeliazkov <iliyan@ociweb.com>
+
+ * tao/ORB_Core.cpp:
+ * tao/TAO_Internal.cpp:
+
+ The initialization of the additional services, which runs right
+ after the global repository initialization (open()) was supposed
+ to execute in the context of that same global repository. This
+ is necessary in case the initialization causes additional
+ services to be registered. Fixes a problem with
+ $TAO_ROOT/tests/RTCORBA/ORB_init.
+
Fri May 5 11:26:42 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
* tao/Asynch_Queued_Message.{h,cpp}:
diff --git a/TAO/tao/ORB_Core.cpp b/TAO/tao/ORB_Core.cpp
index 56a68d70e1d..e2cf1b0e1e4 100644
--- a/TAO/tao/ORB_Core.cpp
+++ b/TAO/tao/ORB_Core.cpp
@@ -2088,7 +2088,11 @@ TAO_ORB_Core::run (ACE_Time_Value *tv,
int perform_work
ACE_ENV_ARG_DECL_NOT_USED)
{
- ACE_Service_Config_Guard guard (this->configuration());
+ // ORB::run may be called from a thread, different from the one that
+ // did the ORB_init, consequently we must establish the Service
+ // Gestalt, this thread will consider "global"
+
+ ACE_Service_Config_Guard use_orbs (this->configuration());
if (TAO_debug_level > 2)
{
diff --git a/TAO/tao/TAO_Internal.cpp b/TAO/tao/TAO_Internal.cpp
index d417436b45a..e696e393121 100644
--- a/TAO/tao/TAO_Internal.cpp
+++ b/TAO/tao/TAO_Internal.cpp
@@ -176,7 +176,14 @@ TAO::ORB::open_services (ACE_Service_Gestalt* pcfg,
ACE_Service_Gestalt * theone = ACE_Service_Config::global ();
if (pcfg != theone)
{
- int status = open_global_services_i (theone, argc, argv, skip_service_config_open);
+ ACE_Service_Config_Guard guard (theone);
+
+ int status =
+ open_global_services_i (theone,
+ argc,
+ argv,
+ skip_service_config_open);
+
if (status == -1)
{
if (TAO_debug_level > 0)
@@ -204,7 +211,6 @@ TAO::ORB::open_services (ACE_Service_Gestalt* pcfg,
-1);
return -1;
}
-
return 0;
}
}
@@ -265,7 +271,6 @@ namespace
if (parse_global_args_i (argc, argv, global_svc_config_argv) == -1)
return -1;
- ACE_Service_Config_Guard guard (theone);
register_global_services_i (theone);
int global_svc_config_argc = global_svc_config_argv.length ();