From fbe3e424f4c83b7a58a8e234684baa805446c25d Mon Sep 17 00:00:00 2001 From: Paul RASCLE Date: Fri, 16 Feb 2018 08:57:46 +0100 Subject: [PATCH] single thread POA for embedded registry server --- src/Session/Session_ServerThread.cxx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Session/Session_ServerThread.cxx b/src/Session/Session_ServerThread.cxx index ee1c1f681..d98a39e46 100755 --- a/src/Session/Session_ServerThread.cxx +++ b/src/Session/Session_ServerThread.cxx @@ -260,9 +260,19 @@ void Session_ServerThread::ActivateRegistry(int argc, RegistryService *ptrRegistry = new RegistryService; ptrRegistry->SessionName( ptrSessionName ); ptrRegistry->SetOrb(_orb); - varComponents = ptrRegistry->_this(); - ptrRegistry->_remove_ref(); //let poa manage registry service deletion - // The RegistryService must not already exist. + // + CORBA::PolicyList policies; + policies.length(1); + PortableServer::ThreadPolicy_var threadPol(_root_poa->create_thread_policy(PortableServer::SINGLE_THREAD_MODEL)); + policies[0]=PortableServer::ThreadPolicy::_duplicate(threadPol); + PortableServer::POAManager_var manager = _root_poa->the_POAManager(); + PortableServer::POA_var poa2(_root_poa->create_POA("SingleThreadPOA4RegistryEmbedded",manager,policies)); + threadPol->destroy(); + // + PortableServer::ObjectId_var id(poa2->activate_object(ptrRegistry)); + CORBA::Object_var pipo=poa2->id_to_reference(id); + varComponents = Registry::Components::_narrow(pipo) ; + ptrRegistry->_remove_ref(); //let poa manage registryservice deletion try { CORBA::Object_var pipo = _NS->Resolve( registryName ); -- 2.39.2