⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 corbaorb.cc

📁 编译工具
💻 CC
📖 第 1 页 / 共 3 页
字号:
    return;  }  omniORB::logs(10, "Preparing to shutdown ORB.");  pd_shutdown_in_progress = 1;  if( wait_for_completion ) {    actual_shutdown();  }  else {    // If wait_for_completion is zero we need to pass this to another    // thread. This is needed to support shutting down the orb from    // a method invocation -- otherwise we would deadlock waiting for    // the method invocation to complete.    omniORB::logs(15, "Starting an ORB shutdown thread.");    (new omni_thread(shutdown_thread_fn, (omniOrbORB*) this))->start();  }}//////////////////////////////////////////////////////////////////////////////////////////////  ORBAsyncInvoker  /////////////////////////////////////////////////////////////////////////////////////////////////OMNI_NAMESPACE_BEGIN(omni)ORBAsyncInvoker::~ORBAsyncInvoker(){  ASSERT_OMNI_TRACEDMUTEX_HELD(orb_lock, 1);  OMNIORB_ASSERT(omniTaskLink::is_empty(invoker_dedicated_tq));  OMNIORB_ASSERT(invoker_threads == 0);}intORBAsyncInvoker::work_pending(){  omni_tracedmutex_lock sync(orb_lock);  return !omniTaskLink::is_empty(invoker_dedicated_tq);}voidORBAsyncInvoker::perform(unsigned long secs, unsigned long nanosecs){  orb_lock.lock();  invoker_threads++;  while (!invoker_shutting_down) {    while (!invoker_shutting_down &&	   omniTaskLink::is_empty(invoker_dedicated_tq)) {      // Wait for a task to arrive      if (secs || nanosecs) {	if (invoker_signal.timedwait(secs, nanosecs) == 0) {	  // timeout	  invoker_threads--;	  if (invoker_shutting_down) invoker_signal.signal();	  orb_lock.unlock();	  return;	}      }      else {	invoker_signal.wait();      }    }    while (!omniTaskLink::is_empty(invoker_dedicated_tq)) {      // Run all queued tasks      omniTask* t = (omniTask*)invoker_dedicated_tq.next;      t->deq();      orb_lock.unlock();      try {	t->execute();      }      catch (...) {	omniORB::logs(1, "ORBAsyncInvoker: Warning - unexpected "		      "exception caught while executing a task.");      }      orb_lock.lock();    }  }  OMNIORB_ASSERT(omniTaskLink::is_empty(invoker_dedicated_tq));  invoker_threads--;  if (invoker_shutting_down) invoker_signal.signal();  orb_lock.unlock();}intORBAsyncInvoker::insert_dedicated(omniTask* t){  OMNIORB_ASSERT(t->category() == omniTask::DedicatedThread);  omni_tracedmutex_lock sync(orb_lock);  t->enq(invoker_dedicated_tq);  invoker_signal.signal();  return 1;}intORBAsyncInvoker::cancel_dedicated(omniTask* t){  OMNIORB_ASSERT(t->category() == omniTask::DedicatedThread);  omni_tracedmutex_lock sync(orb_lock);  omniTaskLink* l;  for (l = invoker_dedicated_tq.next; l != &invoker_dedicated_tq; l= l->next) {    if ((omniTask*)l == t) {      l->deq();      return 1;    }  }  return 0;}OMNI_NAMESPACE_END(omni)static voidshutdownAsyncInvoker(){  ASSERT_OMNI_TRACEDMUTEX_HELD(orb_lock, 1);  invoker_shutting_down = 1;  invoker_signal.broadcast();}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////staticCORBA::BooleanisValidId(const char* id) {  const char** p = orb_ids;  while (*p) {    if (strcmp(*p,id) == 0) return 1;    p++;  }  return 0;}staticconst char*myOrbId() {  return orb_ids[0];}OMNI_NAMESPACE_BEGIN(omni)///////////////////////////////////////////////////////////////////////////////            Hooked initialiser                                           ///////////////////////////////////////////////////////////////////////////////static omnivector<omniInitialiser*>*& the_hooked_list(){  static omnivector<omniInitialiser*>* the_list = 0;  if (!the_list) the_list = new omnivector<omniInitialiser*>;  return the_list;}class omni_hooked_initialiser : public omniInitialiser {public:  void attach() {    omnivector<omniInitialiser*>::iterator i    = the_hooked_list()->begin();    omnivector<omniInitialiser*>::iterator last = the_hooked_list()->end();    for (; i != last; i++) {      (*i)->attach();    }  }  void detach() {    omnivector<omniInitialiser*>::iterator i    = the_hooked_list()->begin();    omnivector<omniInitialiser*>::iterator last = the_hooked_list()->end();    for (; i != last; i++) {      (*i)->detach();    }  }  virtual ~omni_hooked_initialiser() {    omnivector<omniInitialiser*>*& the_list = the_hooked_list();    delete the_list;    the_list = 0;  }};static omni_hooked_initialiser hinitialiser;omniInitialiser& omni_hooked_initialiser_ = hinitialiser;voidomniInitialiser::install(omniInitialiser* init) {  the_hooked_list()->push_back(init);}//////////////////////////////////////////////////////////////////////////////             Configuration options                                      //////////////////////////////////////////////////////////////////////////////CORBA::Boolean   orbParameters::dumpConfiguration = 0;//  Set to 1 to cause the ORB to dump the current set of configuration//  parameters.////  Valid values = 0 or 1CORBA::Boolean   orbParameters::lcdMode = 0;//  Set to 1 to enable 'Lowest Common Denominator' Mode.//  This will disable various features of IIOP and GIOP which are//  poorly supported by some ORBs, and disable warnings/errors when//  certain types of erroneous message are received on the wire.////  Valid values = 0 or 1///////////////////////////////////////////////////////////////////////////////            Handlers for Configuration Options                           ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////class helpHandler : public orbOptions::Handler {public:  helpHandler() :    orbOptions::Handler("help",			0,			1,			"-ORBhelp ",			1) {}  void visit(const char*,orbOptions::Source) throw (orbOptions::BadParam) {    orbOptions::sequenceString_var usage;    usage = orbOptions::singleton().usageArgv();    omniORB::logger l;    l << "Valid -ORB<options> are:\n";    for (CORBA::ULong i = 0; i < usage->length(); i++)      l << "  " << usage[i] << "\n";  }  void dump(orbOptions::sequenceString& result) {    return;  }};static helpHandler helpHandler_;/////////////////////////////////////////////////////////////////////////////class idHandler : public orbOptions::Handler {public:  idHandler() :    orbOptions::Handler("id",			"id = " ORB_ID_STRING,			1,			"-ORBid "ORB_ID_STRING" (standard option)") {}  void visit(const char* value,orbOptions::Source) throw (orbOptions::BadParam) {    if (!isValidId(value)) {      throw orbOptions::BadParam(key(),value,"id is not "ORB_ID_STRING);    }    if( strcmp(value, myOrbId()) ) {      if( omniORB::trace(1) ) {	omniORB::logger l;	l << "WARNING -- using ORBid " << value	  << " (should be " << ORB_ID_STRING << ")." << "\n";      }    }  }  void dump(orbOptions::sequenceString& result) {    orbOptions::addKVString(key(),ORB_ID_STRING,result);  }};static idHandler idHandler_;/////////////////////////////////////////////////////////////////////////////class dumpConfigurationHandler : public orbOptions::Handler {public:  dumpConfigurationHandler() :    orbOptions::Handler("dumpConfiguration",			"dumpConfiguration = 0 or 1",			1,			"-ORBdumpConfiguration < 0 | 1 >") {}  void visit(const char* value,orbOptions::Source) throw (orbOptions::BadParam) {    CORBA::Boolean v;    if (!orbOptions::getBoolean(value,v)) {      throw orbOptions::BadParam(key(),value,				 orbOptions::expect_boolean_msg);    }    orbParameters::dumpConfiguration = v;  }  void dump(orbOptions::sequenceString& result) {    orbOptions::addKVBoolean(key(),orbParameters::dumpConfiguration,			     result);  }};static dumpConfigurationHandler dumpConfigurationHandler_;/////////////////////////////////////////////////////////////////////////////class lcdModeHandler : public orbOptions::Handler {public:  lcdModeHandler() :    orbOptions::Handler("lcdMode",			"lcdMode = 0 or 1",			1,			"-ORBlcdMode < 0 | 1 >") {}  void visit(const char* value,orbOptions::Source) throw (orbOptions::BadParam) {    CORBA::Boolean v;    if (!orbOptions::getBoolean(value,v)) {      throw orbOptions::BadParam(key(),value,				 orbOptions::expect_boolean_msg);    }    orbParameters::lcdMode = v;  }  void dump(orbOptions::sequenceString& result) {    orbOptions::addKVBoolean(key(),orbParameters::lcdMode,			     result);  }};static lcdModeHandler lcdModeHandler_;/////////////////////////////////////////////////////////////////////////////class principalHandler : public orbOptions::Handler {public:  principalHandler() :    orbOptions::Handler("principal",			"principal = <GIOP 1.0 principal string>",			1,			"-ORBprincipal <GIOP 1.0 principal string>") {}  void visit(const char* value,orbOptions::Source) throw (orbOptions::BadParam) {    CORBA::ULong l = strlen(value) + 1;    omni::myPrincipalID.length(l);    for (CORBA::ULong i = 0; i < l; i++)      omni::myPrincipalID[i] = value[i];  }  void dump(orbOptions::sequenceString& result) {    if (omni::myPrincipalID.length() == 0)      orbOptions::addKVString(key(),"[Null]",result);    else {      CORBA::String_var s(CORBA::string_alloc(omni::myPrincipalID.length()+1));      CORBA::ULong i;      for (i=0; i<omni::myPrincipalID.length(); i++) {	((char*)s)[i] = omni::myPrincipalID[i];      }      ((char*)s)[i] = '\0';      orbOptions::addKVString(key(),s,result);    }  }};static principalHandler principalHandler_;/////////////////////////////////////////////////////////////////////////////class poa_iiop_portHandler : public orbOptions::Handler {public:#define POA_IIOP_IS_OBSOLETE "is now obsolete, use -ORBendpoint instead"  poa_iiop_portHandler() :    orbOptions::Handler("poa_iiop_port",0,1,0) {}  void visit(const char* value,orbOptions::Source) throw (orbOptions::BadParam) {    throw orbOptions::BadParam(key(),value,			       "poa_iiop_port"POA_IIOP_IS_OBSOLETE);  }  void dump(orbOptions::sequenceString& result) {    return;  }};static poa_iiop_portHandler poa_iiop_portHandler_;/////////////////////////////////////////////////////////////////////////////class poa_iiop_name_portHandler : public orbOptions::Handler {public:  poa_iiop_name_portHandler() :    orbOptions::Handler("poa_iiop_name_port",0,1,0) {}  void visit(const char* value,orbOptions::Source) throw (orbOptions::BadParam) {    throw orbOptions::BadParam(key(),value,			       "poa_iiop_name_port"POA_IIOP_IS_OBSOLETE);  }  void dump(orbOptions::sequenceString& result) {    return;  }};static poa_iiop_name_portHandler poa_iiop_name_portHandler_;/////////////////////////////////////////////////////////////////////////////class configFileHandler : public orbOptions::Handler {public:  configFileHandler() :    orbOptions::Handler("configFile",			"configFile = <filename>",			1,			"-ORBconfigFile <filename>") {}  void visit(const char* value,orbOptions::Source) throw (orbOptions::BadParam) {    // Do nothing -- already handled before normal arguments are processed  }  void dump(orbOptions::sequenceString& result) {    orbOptions::addKVString(key(), config_fname ? config_fname : "[none]",			    result);  }};static configFileHandler configFileHandler_;///////////////////////////////////////////////////////////////////////////////            Module initialiser                                           ///////////////////////////////////////////////////////////////////////////////class omni_corbaOrb_initialiser : public omniInitialiser {public:  omni_corbaOrb_initialiser() {    orbOptions::singleton().registerHandler(helpHandler_);    orbOptions::singleton().registerHandler(idHandler_);    orbOptions::singleton().registerHandler(dumpConfigurationHandler_);    orbOptions::singleton().registerHandler(lcdModeHandler_);    orbOptions::singleton().registerHandler(principalHandler_);    orbOptions::singleton().registerHandler(poa_iiop_portHandler_);    orbOptions::singleton().registerHandler(poa_iiop_name_portHandler_);    orbOptions::singleton().registerHandler(configFileHandler_);  }  void attach() {#if !defined(__CIAO__)# if defined(HAVE_SIGACTION)    struct sigaction act;    sigemptyset(&act.sa_mask);#  ifdef HAVE_SIG_IGN    act.sa_handler = SIG_IGN;#  else    act.sa_handler = (void (*)())0;#  endif    act.sa_flags = 0;    if (sigaction(SIGPIPE,&act,0) < 0) {      if( omniORB::trace(1) ) {	omniORB::logger l;	l << "WARNING -- ORB_init() cannot install the\n"	  " SIG_IGN handler for signal SIGPIPE. (errno = " << errno << ")\n";      }    }# elif defined(HAVE_SIGVEC)    struct sigvec act;    act.sv_mask = 0;    act.sv_handler = SIG_IGN;    act.sv_flags = 0;    if (sigvec(SIGPIPE,&act,0) < 0) {      if( omniORB::trace(1) ) {	omniORB::logger l;	l << "WARNING -- ORB_init() cannot install the\n"	  " SIG_IGN handler for signal SIGPIPE. (errno = " << errno << ")\n";      }    }# endif // HAVE_SIGACTION#endif // __CIAO__    orbAsyncInvoker = new ORBAsyncInvoker(orbParameters::maxServerThreadPoolSize);    invoker_shutting_down = 0;  }  void detach() {    if (orbAsyncInvoker) {      if (invoker_threads) {	omniORB::logs(20, "Wait for ORB invoker threads to finish.");	while (invoker_threads)	  invoker_signal.wait();	omniORB::logs(20, "All ORB invoker threads finished.");      }      delete orbAsyncInvoker;      orbAsyncInvoker = 0;      invoker_shutting_down = 0;    }#ifdef __WIN32__    (void) WSACleanup();#endif  }};static omni_corbaOrb_initialiser initialiser;omniInitialiser& omni_corbaOrb_initialiser_ = initialiser;OMNI_NAMESPACE_END(omni)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -