Summary: | ORB Problems with VxWorks 6.x Kernel Mode | ||
---|---|---|---|
Product: | TAO | Reporter: | Abdul Sowayan <abdullah.sowayan> |
Component: | ORB | Assignee: | Johnny Willemsen <jwillemsen> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | iliyan |
Priority: | P3 | ||
Version: | 1.6.1 | ||
Hardware: | All | ||
OS: | other | ||
Bug Depends on: | 2995, 3082 | ||
Bug Blocks: |
Description
Abdul Sowayan
2007-07-02 12:48:21 CDT
VxWorks 6.3 and 6.4 Kernel mode might have the same problem as well. mine not fixed yet on svn head Problem seems related to Service Config/Service Gestalt, the ORBInitializerRegistry is added to one registry, then we try to retrieve it from another one. -> cd "/nfsace/galadriel/VxWorks/ppc604/ACE_wrappers/TAO/tests/Portable_Interceptors/Recursive_ORBInitializer" value = 0 = 0x0 -> putenv("TMPDIR=/nfsace/galadriel/VxWorks/ppc604/ACE_wrappers/TAO/tests/Portable_Interceptors/Recursive_ORBInitializer") value = 0 = 0x0 -> putenv("ACE_DEBUG=1") value = 0 = 0x0 -> ld < client.out ACE (-1|41472320) SG::ctor - this = 0x27e3f04, pss = 0x0 ACE (-1|41472320) SG::process_directive_i, repo=0x27e4000 - ClientRequestInterceptor_Adapter_Factory, dll=<null>, force=0 ACE (-1|41472320) SR::insert - repo=0x27e4000 [0] (1024), name=ClientRequestInterceptor_Adapter_Factory, type=0x32609d0, object=0x3260910, active=0 ACE (-1|41472320) SG::add_processed_static_svc, repo=0x27e4000 - ClientRequestInterceptor_Adapter_Factory ACE (-1|41472320) SG::process_directive_i, repo=0x27e4000 - PICurrent_Loader, dll=<null>, force=0 ACE (-1|41472320) SR::insert - repo=0x27e4000 [1] (1024), name=PICurrent_Loader, type=0x3260c40, object=0x3260b80, active=0 ACE (-1|41472320) SG::add_processed_static_svc, repo=0x27e4000 - PICurrent_Loader ACE (-1|41472320) SG::process_directive_i, repo=0x27e4000 - ORBInitializer_Registry, dll=<null>, force=0 ACE (-1|41472320) SR::insert - repo=0x27e4000 [2] (1024), name=ORBInitializer_Registry, type=0x3260ed0, object=0x3260d80, active=0 ACE (-1|41472320) SG::add_processed_static_svc, repo=0x27e4000 - ORBInitializer_Registry ACE (-1|41472320) SG::ctor - this = 0x32621b0, pss = 0x0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x0 => 0x0 (-1|41472320) ERROR: ORBInitializer Registry unable to find the ORBInitializer Registry instance: OK ACE (-1|41472320) SG::process_directive_i, repo=0x32621f0 - CodecFactory_Loader, dll=<null>, force=0 ACE (-1|41472320) SR::insert - repo=0x32621f0 [0] (1024), name=CodecFactory_Loader, type=0x3261010, object=0x32647d0, active=0 ACE (-1|41472320) SG::add_processed_static_svc, repo=0x32621f0 - CodecFactory_Loader ACE (-1|41472320) SG::process_directive_i, repo=0x32621f0 - PolicyFactory_Loader, dll=<null>, force=0 ACE (-1|41472320) SR::insert - repo=0x32621f0 [1] (1024), name=PolicyFactory_Loader, type=0x3264a30, object=0x3264970, active=0 ACE (-1|41472320) SG::add_processed_static_svc, repo=0x32621f0 - PolicyFactory_Loader ACE (-1|41472320) SG::process_directive_i, repo=0x32621f0 - ClientRequestInterceptor_Adapter_Factory, dll=<null>, force=0 ACE (-1|41472320) SR::insert - repo=0x32621f0 [2] (1024), name=ClientRequestInterceptor_Adapter_Factory, type=0x3264c30, object=0x3264b70, active=0 ACE (-1|41472320) SG::add_processed_static_svc, repo=0x32621f0 - ClientRequestInterceptor_Adapter_Factory ACE (-1|41472320) SG::process_directive_i, repo=0x32621f0 - PICurrent_Loader, dll=<null>, force=0 ACE (-1|41472320) SR::insert - repo=0x32621f0 [3] (1024), name=PICurrent_Loader, type=0x3264e60, object=0x3264da0, active=0 ACE (-1|41472320) SG::add_processed_static_svc, repo=0x32621f0 - PICurrent_Loader ACE (-1|41472320) SG::process_directive_i, repo=0x32621f0 - ORBInitializer_Registry, dll=<null>, force=0 ACE (-1|41472320) SR::insert - repo=0x32621f0 [4] (1024), name=ORBInitializer_Registry, type=0x32650f0, object=0x3264fa0, active=0 ACE (-1|41472320) SG::add_processed_static_svc, repo=0x32621f0 - ORBInitializer_Registry ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) SG::process_directive_i, repo=0x32621f0 - TAO_Codeset, dll=<null>, force=0 ACE (-1|41472320) SR::insert - repo=0x32621f0 [5] (1024), name=TAO_Codeset, type=0x32656d0, object=0x3265810, active=0 ACE (-1|41472320) SG::add_processed_static_svc, repo=0x32621f0 - TAO_Codeset ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=ORBInitializer_Registry type=0x32650f0 => 0x3264fa0 ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=TAO_ORB_Core_Static_Resources type=0x0 => 0x0 ACE (-1|41472320) SG::process_directive_i, repo=0x32621f0 - TAO_ORB_Core_Static_Resources, dll=<null>, force=0 ACE (-1|41472320) SR::insert - repo=0x32621f0 [6] (1024), name=TAO_ORB_Core_Static_Resources, type=0x3266be0, object=0x3266a90, active=0 ACE (-1|41472320) SG::add_processed_static_svc, repo=0x32621f0 - TAO_ORB_Core_Static_Resources ACE (-1|41472320) DSB::instance, repo=0x32621f0, name=TAO_ORB_Core_Static_Resources type=0x3266be0 => 0x3266a90 ACE (-1|41472320) DSB::instance, repo=0x27e4000, name=TAO_ORB_Core_Static_Resources type=0x0 => 0x0 added depends, this is all related to service config/service gestalt The problem seems to be related to service config/gestalt. When the image is downloaded the static initializers fill a service repository. At the moment PortableInterceptor::register_orb_initializer is called we do an init of the TAO_Singleton_Manager and after that the services are registered to a different registry. When we then try to retrieve the ORBInitializer_Registry we get a 0 pointer back because we only look in the registry that is created during the TAO_Singleton_Manager::init call. At the moment we change the PortableInterceptor::register_orb_initializer to look at the global registry it works a little bit better, but still we have services in one registry that aren't in the global one. We could get some other tests running by adding the TAO_Singleton_Manager::init call to more static initializers so that we do it before we register any service but that seems more a hack then a real solution. This code worked with x.5.7 but now seems to fail on svn head Problem seems to be related to the ACE_Object_Manager. The SC::process_directive call uses the current, which is stored in TSS. But on VxWorks we have TSS emulation which is initialized from the ACE_Object_Manager, but this is done as part of the TAO_Singleton_Manager::init. At the moment I do call ACE_Object_Manager::init() before the process_directive it seems to work. Using TSS during static initialization seems tricky at this moment TSS problem has been resolved. During SG construction we call a new Object_Manager::init_tss which just initializes the TSS. We just can't call OM::init because that again calls SG, which calls OM::init, etc, etc. Only thing to check is that in PortableInterceptor::register_orb_initializer we do need to check the global repository, the loader thread has a different sg then the main thread. Maybe we have a guard we can use, or just use false with the retrieval of the ORBInitializer_Registry Doing a build on the test system and will run the TAO tests first before merging changes to head mine. most changes are in svn now, rebuilding for a new test Fixed. Naming Service runs again on VxWorks 6.4 PPC604 kernel mode, svn 79964 |