[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!