omniinternal.cc

来自「编译工具」· CC 代码 · 共 1,724 行 · 第 1/4 页

CC
1,724
字号
  if( omniORB::trace(1) ) {    omniORB::logger l;    l << "Application check failed. This indicates a bug in the application\n"      " using omniORB.  See the comment in the source code for more info.\n"      " file: " << file << "\n"      " line: " << line << "\n"      " info: " << expr << "\n";  }}///////////////////////////////////////////////////////////////////////////////            Handlers for Configuration Options                           ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////class traceLevelHandler : public orbOptions::Handler {public:  traceLevelHandler() :     orbOptions::Handler("traceLevel",			"traceLevel = n >= 0",			1,			"-ORBtraceLevel < n >= 0 >") {}  void visit(const char* value,orbOptions::Source) throw (orbOptions::BadParam) {    CORBA::ULong v;    if (!orbOptions::getULong(value,v)) {      throw orbOptions::BadParam(key(),value,				 orbOptions::expect_ulong_msg);    }    omniORB::traceLevel = v;    if (v >= 10)      omniORB::traceExceptions = 1;  }  void dump(orbOptions::sequenceString& result) {    orbOptions::addKVULong(key(),omniORB::traceLevel,			   result);  }};static traceLevelHandler traceLevelHandler_;/////////////////////////////////////////////////////////////////////////////class traceExceptionsHandler : public orbOptions::Handler {public:  traceExceptionsHandler() :     orbOptions::Handler("traceExceptions",			"traceExceptions = 0 or 1",			1,			"-ORBtraceExceptions < 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);    }    omniORB::traceExceptions = v;  }  void dump(orbOptions::sequenceString& result) {    orbOptions::addKVBoolean(key(),omniORB::traceExceptions,			     result);  }};static traceExceptionsHandler traceExceptionsHandler_;/////////////////////////////////////////////////////////////////////////////class traceInvocationsHandler : public orbOptions::Handler {public:  traceInvocationsHandler() :     orbOptions::Handler("traceInvocations",			"traceInvocations = 0 or 1",			1,			"-ORBtraceInvocations < 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);    }    omniORB::traceInvocations = v;  }  void dump(orbOptions::sequenceString& result) {    orbOptions::addKVBoolean(key(),omniORB::traceInvocations,			     result);  }};static traceInvocationsHandler traceInvocationsHandler_;/////////////////////////////////////////////////////////////////////////////class traceThreadIdHandler : public orbOptions::Handler {public:  traceThreadIdHandler() :     orbOptions::Handler("traceThreadId",			"traceThreadId = 0 or 1",			1,			"-ORBtraceThreadId < 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);    }    omniORB::traceThreadId = v;  }  void dump(orbOptions::sequenceString& result) {    orbOptions::addKVBoolean(key(),omniORB::traceThreadId,			     result);  }};static traceThreadIdHandler traceThreadIdHandler_;/////////////////////////////////////////////////////////////////////////////class traceFileHandler : public orbOptions::Handler {public:  traceFileHandler() :    orbOptions::Handler("traceFile",			"traceFile = <filename>",			1,			"-ORBtraceFile <filename>") {}  void visit(const char* value,orbOptions::Source) throw (orbOptions::BadParam) {    omniORB::setLogFilename(value);  }  void dump(orbOptions::sequenceString& result) {    const char* n = omniORB::getLogFilename();    orbOptions::addKVString(key(), n ? n : "[stderr]", result);  }};static traceFileHandler traceFileHandler_;/////////////////////////////////////////////////////////////////////////////class objectTableSizeHandler : public orbOptions::Handler {public:  objectTableSizeHandler() :     orbOptions::Handler("objectTableSize",			"objectTableSize = n >= 0",			1,			"-ORBobjectTableSize < n >= 0 >") {}  void visit(const char* value,orbOptions::Source) throw (orbOptions::BadParam) {    CORBA::ULong v;    if (!orbOptions::getULong(value,v)) {      throw orbOptions::BadParam(key(),value,orbOptions::expect_ulong_msg);    }    orbParameters::objectTableSize = v;  }  void dump(orbOptions::sequenceString& result) {    orbOptions::addKVULong(key(),orbParameters::objectTableSize,			   result);  }};static objectTableSizeHandler objectTableSizeHandler_;/////////////////////////////////////////////////////////////////////////////class abortOnInternalErrorHandler : public orbOptions::Handler {public:  abortOnInternalErrorHandler() :     orbOptions::Handler("abortOnInternalError",			"abortOnInternalError = 0 or 1",			1,			"-ORBabortOnInternalError < 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::abortOnInternalError = v;  }  void dump(orbOptions::sequenceString& result) {    orbOptions::addKVBoolean(key(),orbParameters::abortOnInternalError,			     result);  }};static abortOnInternalErrorHandler abortOnInternalErrorHandler_;/////////////////////////////////////////////////////////////////////////////class abortOnNativeExceptionHandler : public orbOptions::Handler {public:  abortOnNativeExceptionHandler() :     orbOptions::Handler("abortOnNativeException",			"abortOnNativeException = 0 or 1",			1,			"-ORBabortOnNativeException < 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);    }    abortOnNativeException = v;  }  void dump(orbOptions::sequenceString& result) {    orbOptions::addKVBoolean(key(),abortOnNativeException,result);  }};static abortOnNativeExceptionHandler abortOnNativeExceptionHandler_;#ifdef __WIN32__extern "C" void omniORB_rethrow_exception(unsigned, EXCEPTION_POINTERS*){  throw;}static void abortOnNativeExceptionInterceptor(omniInterceptors::					      createThread_T::info_T& info){  _set_se_translator(omniORB_rethrow_exception);  info.run();}#endif///////////////////////////////////////////////////////////////////////////////            Module initialiser                                           ///////////////////////////////////////////////////////////////////////////////OMNI_NAMESPACE_BEGIN(omni)class omni_omniInternal_initialiser : public omniInitialiser {public:  omni_omniInternal_initialiser() {    orbOptions::singleton().registerHandler(traceLevelHandler_);    orbOptions::singleton().registerHandler(traceExceptionsHandler_);    orbOptions::singleton().registerHandler(traceInvocationsHandler_);    orbOptions::singleton().registerHandler(traceThreadIdHandler_);    orbOptions::singleton().registerHandler(traceFileHandler_);    orbOptions::singleton().registerHandler(objectTableSizeHandler_);    orbOptions::singleton().registerHandler(abortOnInternalErrorHandler_);    orbOptions::singleton().registerHandler(abortOnNativeExceptionHandler_);  }  void attach() {    if (!omni::internalLock)   omni::internalLock   = new omni_tracedmutex;    if (!omni::poRcLock)       omni::poRcLock       = new omni_tracedmutex;    if (!omni::objref_rc_lock) omni::objref_rc_lock = new omni_tracedmutex;    numObjectsInTable = 0;    minNumObjects = 0;    if( orbParameters::objectTableSize ) {      objectTableSize = orbParameters::objectTableSize;      maxNumObjects = 1ul << 31;    }    else {      objectTableSizeI = 0;      objectTableSize = objTblSizes[objectTableSizeI];      maxNumObjects = objectTableSize * 2 / 3;    }    objectTable = new omniObjTableEntry* [objectTableSize];    for( CORBA::ULong i = 0; i < objectTableSize; i++ )  objectTable[i] = 0;#ifdef __WIN32__    if (abortOnNativeException) {      omniInterceptors* interceptors = omniORB::getInterceptors();      interceptors->createThread.add(abortOnNativeExceptionInterceptor);    }#endif  }  void detach() {    OMNIORB_ASSERT(numObjectsInTable == 0);    delete [] objectTable;    objectTable = 0;  }};static omni_omniInternal_initialiser initialiser;omniInitialiser& omni_omniInternal_initialiser_ = initialiser;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////class static_initialiser {public:  inline static_initialiser() {    // Ensure that nil_ref_lock is initialised during    // static initialisation.    omni::nilRefLock();  }  static static_initialiser the_instance;};OMNI_NAMESPACE_END(omni)///////////////////////////////////////////////////////////////////////////////            Nil object reference list                                    ///////////////////////////////////////////////////////////////////////////////static omnivector<CORBA::Object_ptr>*& nilObjectList() {  static omnivector<CORBA::Object_ptr>* the_list = 0;  if (!the_list) the_list = new omnivector<CORBA::Object_ptr>;  return the_list;}static omnivector<omniTrackedObject*>*& trackedList() {  static omnivector<omniTrackedObject*>* the_list = 0;  if (!the_list) the_list = new omnivector<omniTrackedObject*>;  return the_list;}OMNI_NAMESPACE_BEGIN(omni)void registerNilCorbaObject(CORBA::Object_ptr obj){  nilObjectList()->push_back(obj);}void registerTrackedObject(omniTrackedObject* obj){  trackedList()->push_back(obj);}OMNI_NAMESPACE_END(omni)///////////////////////////////////////////////////////////////////////////////            Final clean-up                                               ///////////////////////////////////////////////////////////////////////////////static int& count() {  static int the_count = 0;  return the_count;}_omniFinalCleanup::_omniFinalCleanup() {  ++count();}_omniFinalCleanup::~_omniFinalCleanup(){  if (--count() != 0)    return;  if (!omniOrbORB::all_destroyed()) {    omniORB::logs(15, "ORB not destroyed; no final clean-up.");    return;  }  omniORB::logs(15, "Final clean-up");  int nils = 0;  omnivector<CORBA::Object_ptr>::iterator i = nilObjectList()->begin();  for (; i != nilObjectList()->end(); i++, nils++)    delete *i;  delete nilObjectList();  nilObjectList() = 0;  int tracked = 0;  omnivector<omniTrackedObject*>::iterator j = trackedList()->begin();  for (; j != trackedList()->end(); j++, tracked++)    delete *j;  delete trackedList();  trackedList() = 0;  if (omniORB::trace(15)) {    omniORB::logger l;    l << "Deleted " << nils << " nil object reference"      << (nils == 1 ? "" : "s" )      << " and " << tracked << " other tracked object"      << (tracked == 1 ? "" : "s" )      << ".\n";  }  // Remove list of proxyObjectFactories  proxyObjectFactory::shutdown();  // Delete mutexes  delete &omni::nilRefLock();  if (omni::internalLock)   delete omni::internalLock;  if (omni::objref_rc_lock) delete omni::objref_rc_lock;  if (omni::poRcLock)       delete omni::poRcLock;  if (omniTransportLock)    delete omniTransportLock;  if (omniIOR::lock)        delete omniIOR::lock;  omni::internalLock   = 0;  omni::objref_rc_lock = 0;  omni::poRcLock       = 0;  omniTransportLock    = 0;  omniIOR::lock        = 0;  omniORB::logs(10, "Final clean-up completed.");}

⌨️ 快捷键说明

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