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 + -
显示快捷键?