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

📄 omniobjref.cc

📁 编译工具
💻 CC
📖 第 1 页 / 共 3 页
字号:
    {      omni::internalLock->lock();      pd_flags.object_exists = 1;      omni::internalLock->unlock();    }  }}CORBA::Boolean omniObjRef::__is_equivalent(omniObjRef* o_obj){  ASSERT_OMNI_TRACEDMUTEX_HELD(*omni::internalLock, 0);  {    omni_tracedmutex_lock sync(*omni::internalLock);    return pd_id->is_equivalent(o_obj->pd_id);  }}CORBA::ULongomniObjRef::__hash(CORBA::ULong maximum){  ASSERT_OMNI_TRACEDMUTEX_HELD(*omni::internalLock, 0);  const CORBA::Octet* key;  int keysize;  {    omni_tracedmutex_lock sync(*omni::internalLock);    key = pd_id->key();    keysize = pd_id->keysize();    return CORBA::ULong(omni::hash(key, keysize) % maximum);  }}//////////////////////////////////////////////////////////////////////CORBA::BooleanomniObjRef::_remote_is_a(const char* a_repoId){  ASSERT_OMNI_TRACEDMUTEX_HELD(*omni::internalLock, 0);  omni_is_a_CallDesc call_desc("_is_a", sizeof("_is_a"), a_repoId);  _invoke(call_desc, 0);  return call_desc.result;}//////////////////////////////////////////////////////////////////////CORBA::BooleanomniObjRef::_remote_non_existent(){  ASSERT_OMNI_TRACEDMUTEX_HELD(*omni::internalLock, 0);  omni_non_existent_CallDesc call_desc("_non_existent",				       sizeof("_non_existent"));  _invoke(call_desc, 0);  return call_desc.result;}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void*omniObjRef::_transientExceptionHandler(void*& cookie){  if (pd_flags.transient_exception_handler) {    omniExHandlers_iterator iter;    omniExHandlers* hp = iter.find(this);    if (hp != 0) {      cookie = hp->transient_cookie;      void* result = hp->transient_hdr;      return result;    }  }  return 0;}voidomniObjRef::_transientExceptionHandler(void* new_handler,void* cookie){  omniExHandlers_iterator iter;  omniExHandlers* hp = iter.find_or_create(this);  hp->transient_cookie = cookie;  hp->transient_hdr = new_handler;  pd_flags.transient_exception_handler = 1;}void*omniObjRef::_commFailureExceptionHandler(void*& cookie){  if (pd_flags.commfail_exception_handler) {    omniExHandlers_iterator iter;    omniExHandlers* hp = iter.find(this);    if (hp != 0) {      cookie = hp->commfail_cookie;      void* result = hp->commfail_hdr;      return result;    }  }  return 0;}voidomniObjRef::_commFailureExceptionHandler(void* new_handler, void* cookie){  omniExHandlers_iterator iter;  omniExHandlers* hp = iter.find_or_create(this);  hp->commfail_cookie = cookie;  hp->commfail_hdr = new_handler;  pd_flags.commfail_exception_handler = 1;}void*omniObjRef::_systemExceptionHandler(void*& cookie){  if (pd_flags.system_exception_handler) {    omniExHandlers_iterator iter;    omniExHandlers* hp = iter.find(this);    if (hp != 0) {      cookie = hp->sysexcpt_cookie;      void* result = hp->sysexcpt_hdr;      return result;    }  }  return 0;}voidomniObjRef::_systemExceptionHandler(void* new_handler,void* cookie){  omniExHandlers_iterator iter;  omniExHandlers* hp = iter.find_or_create(this);  hp->sysexcpt_cookie = cookie;  hp->sysexcpt_hdr = new_handler;  pd_flags.system_exception_handler = 1;}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////omniObjRef::~omniObjRef(){  if( pd_refCount ) {    if( omniORB::traceLevel > 0 ) {      omniORB::logger log;      log <<	"omniORB: ERROR -- an object reference has been explicity deleted.\n"	" This is not legal, and will probably lead to a crash. Good luck!\n";    }  }  if (!pd_ior) return; // Nil  ASSERT_OMNI_TRACEDMUTEX_HELD(*omni::internalLock, 0);  {    omni_tracedmutex_lock sync(*omni::objref_rc_lock);    *pd_prev = pd_next;    if (pd_next) pd_next->pd_prev = pd_prev;  }  if (pd_flags.static_repoId) {    if (pd_mostDerivedRepoId != pd_intfRepoId)      delete [] pd_mostDerivedRepoId;  }  else {    if( pd_intfRepoId != pd_mostDerivedRepoId )      delete[] pd_intfRepoId;    if( pd_mostDerivedRepoId )  delete[] pd_mostDerivedRepoId;  }  if (pd_ior) pd_ior->release();  OMNIORB_ASSERT(pd_id == 0);}omniObjRef::omniObjRef()  : pd_refCount(0),    pd_mostDerivedRepoId(0),    pd_intfRepoId(0),    pd_ior(0),    pd_id(0),    pd_next(0),    pd_prev(0){  // Nil objref.  pd_flags.orb_shutdown = 0;}omniObjRef::omniObjRef(const char* intfRepoId, omniIOR* ior,		       omniIdentity* id, _CORBA_Boolean static_repoId)  : pd_refCount(1),    pd_ior(ior),    pd_id(id),    pd_timeout_secs(0),    pd_timeout_nanosecs(0){  OMNIORB_ASSERT(intfRepoId);  OMNIORB_ASSERT(ior);  OMNIORB_ASSERT(id);  if (static_repoId) {    pd_intfRepoId = (char*)intfRepoId; // Excuse the dodgy cast :-)  }  else {    pd_intfRepoId = new char[strlen(intfRepoId) + 1];    strcpy(pd_intfRepoId, intfRepoId);  }  if( omni::ptrStrMatch(intfRepoId, ior->repositoryID()) ) {    pd_mostDerivedRepoId = pd_intfRepoId;  }  else {    pd_mostDerivedRepoId = new char[strlen(ior->repositoryID()) + 1];    strcpy(pd_mostDerivedRepoId, ior->repositoryID());  }  {    omni_tracedmutex_lock sync(*omni::objref_rc_lock);    pd_next = objref_list;    pd_prev = &objref_list;    if (pd_next) pd_next->pd_prev = &pd_next;    objref_list = this;  }  pd_flags.forward_location = 0;  pd_flags.type_verified = 1;  pd_flags.object_exists = omniObjTableEntry::downcast(id) ? 1 : 0;  pd_flags.transient_exception_handler = 0;  pd_flags.commfail_exception_handler = 0;  pd_flags.system_exception_handler = 0;  pd_flags.static_repoId = static_repoId;  pd_flags.orb_shutdown = 0;}voidomniObjRef::_shutdown(){  omni_tracedmutex_lock sync(*omni::internalLock);  omni_tracedmutex_lock sync2(*omni::objref_rc_lock);  int i=0;  for (omniObjRef* o = objref_list; o; o = o->pd_next, i++)    o->_disable();  if (omniORB::trace(15)) {    omniORB::logger l;    l << i << " object reference" << (i == 1 ? "" : "s")      << " present at ORB shutdown.\n";  }}voidomniObjRef::_disable(){  ASSERT_OMNI_TRACEDMUTEX_HELD(*omni::internalLock, 1);  if (omniORB::trace(25)) {    omniORB::logger l;    l << "Disable ObjRef(" << pd_mostDerivedRepoId << ") " << pd_id << "\n";  }  _setIdentity(omniShutdownIdentity::singleton());  pd_flags.orb_shutdown = 1;}voidomniObjRef::_invoke(omniCallDescriptor& call_desc, CORBA::Boolean do_assert){#define	RECOVER_FORWARD do {\  omni::revertToOriginalProfile(this); \  CORBA::TRANSIENT ex2(TRANSIENT_FailedOnForwarded, ex.completed()); \  if( !_omni_callTransientExceptionHandler(this, retries++, ex2) ) \    throw ex2; \} while(0)  int retries = 0;#if defined(__DECCXX) && __DECCXX_VER < 60300000  // Work-around for bug in Compaq C++ optimiser  volatile#endif  int fwd = 0;  if( _is_nil() )  _CORBA_invoked_nil_objref();  call_desc.objref(this);  omniCurrent* current;  unsigned long abs_secs = 0, abs_nanosecs = 0;  if (pd_timeout_secs || pd_timeout_nanosecs) {    omni_thread::get_time(&abs_secs,&abs_nanosecs,			  pd_timeout_secs, pd_timeout_nanosecs);  }  else if (orbParameters::supportPerThreadTimeOut &&	   (current = omniCurrent::get()) &&	   (current->timeout_secs() || current->timeout_nanosecs())) {        if (current->timeout_absolute()) {      abs_secs     = current->timeout_secs();      abs_nanosecs = current->timeout_nanosecs();    }    else {      omni_thread::get_time(&abs_secs,&abs_nanosecs,			    current->timeout_secs(),			    current->timeout_nanosecs());    }  }  else if (orbParameters::clientCallTimeOutPeriod.secs ||	   orbParameters::clientCallTimeOutPeriod.nanosecs) {    omni_thread::get_time(&abs_secs,&abs_nanosecs,			  orbParameters::clientCallTimeOutPeriod.secs,			  orbParameters::clientCallTimeOutPeriod.nanosecs);  }  if (abs_secs || abs_nanosecs)    call_desc.setDeadline(abs_secs,abs_nanosecs);  while(1) {    if( orbParameters::verifyObjectExistsAndType && do_assert )      _assertExistsAndTypeVerified();    try{      omni::internalLock->lock();      fwd = pd_flags.forward_location;      _identity()->dispatch(call_desc);      return;    }    catch(const giopStream::CommFailure& ex) {      if (ex.retry()) continue;      if( fwd ) {	RECOVER_FORWARD;	continue;      }      if (is_COMM_FAILURE_minor(ex.minor())) {	CORBA::COMM_FAILURE ex2(ex.minor(), ex.completed());	if( !_omni_callCommFailureExceptionHandler(this, retries++, ex2) )	  OMNIORB_THROW(COMM_FAILURE,ex.minor(),ex.completed());      }      else {	CORBA::TRANSIENT ex2(ex.minor(), ex.completed());	if( !_omni_callTransientExceptionHandler(this, retries++, ex2) )	  OMNIORB_THROW(TRANSIENT,ex.minor(),ex.completed());      }    }    catch(CORBA::COMM_FAILURE& ex) {      if( fwd ) {	RECOVER_FORWARD;	continue;      }      if( !_omni_callCommFailureExceptionHandler(this, retries++, ex) )	OMNIORB_THROW(COMM_FAILURE,ex.minor(),ex.completed());    }    catch(CORBA::TRANSIENT& ex) {      if( !_omni_callTransientExceptionHandler(this, retries++, ex) )	OMNIORB_THROW(TRANSIENT,ex.minor(),ex.completed());    }    catch(CORBA::OBJECT_NOT_EXIST& ex) {      if( fwd ) {	RECOVER_FORWARD;	continue;      }      if( !_omni_callSystemExceptionHandler(this, retries++, ex) )	OMNIORB_THROW(OBJECT_NOT_EXIST,ex.minor(),ex.completed());    }    catch(CORBA::SystemException& ex) {      if( !_omni_callSystemExceptionHandler(this, retries++, ex) )	throw;    }    catch(omniORB::LOCATION_FORWARD& ex) {      if( CORBA::is_nil(ex.get_obj()) ) {	CORBA::TRANSIENT ex2(TRANSIENT_NoUsableProfile, CORBA::COMPLETED_NO);	if( omniORB::traceLevel > 10 ){	  omniORB::logger log;	  log << "Received GIOP::LOCATION_FORWARD message that"	    " contains a nil object reference.\n";

⌨️ 快捷键说明

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