[omniORB] omniORB 3.00pre1 problem with _is_a (_real_is_a)

Christof Meerwald cmeerw@htl.fh-sbg.ac.at
Mon, 22 Nov 1999 01:19:11 +0100


Hi David,

On Mon, 8 Nov 1999 09:35:38 +0000 (GMT), David Riddoch wrote:
>Yes, I think you're right.  Just remove those lines.

>On Sun, 7 Nov 1999, Christof Meerwald wrote:
>> I think there is a problem in omniObjRef::_real_is_a:
>> 
>>   {
>>     omni::internalLock->lock();
>>     int tv = pd_flags.type_verified;
>>     omni::internalLock->unlock();
>>     if( tv )  return 0;
>>   }
[...]
>> As I understand it, _real_is_a shouldn't return 0 without calling
>> _remote_is_a.

There seems to be a related problem in omniInternal.cc (omni::createObjRef,
line 558):

  proxyObjectFactory* pof = proxyObjectFactory::lookup(mostDerivedRepoId);

  if( pof && !pof->is_a(targetRepoId) &&
      strcmp(targetRepoId, CORBA::Object::_PD_repoId) ) {
    if( omniORB::trace(10) )
      omniORB::logf("Cannot create reference -- %s is\n"
                    " not a base for %s.", targetRepoId, mostDerivedRepoId);


This returns a nil reference if the information supplied in
mostDerivedRepoId isn't really the most derived interface (e.g. if
mostDerivedRepoId says omg.org/CORBA/Object but it really is a more derived
interface)


bye, Christof

-- 
Don't hate yourself in the morning... sleep until noon!