[omniORB] omniORB 3.00pre1 problem with _is_a (_real_is_a)
Christof Meerwald
cmeerw@htl.fh-sbg.ac.at
Sun, 7 Nov 1999 15:05:32 +0100
Hi,
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;
}
But the specs say (CORBA 2.3.1: 99-10-07, 13.6.2 Interoperable Object
References: IORs):
The type ID, if provided by the server, indicates the most derived type
that the server wishes to publish, at the time the reference is generated.
The object's actual most derived type may later change to a more derived
type. Therefore, the type ID in the IOR can only be interpreted by the
client as a hint that the object supports at least the indicated
interface. The client can succeed in narrowing the reference to the
indicated interface, or to one of its base interfaces, based solely on the
type ID in the IOR, but must not fail to narrow the reference without
consulting the object via the "_is_a" or "_get_interface"
pseudo-operations.
As I understand it, _real_is_a shouldn't return 0 without calling
_remote_is_a.
bye, Christof
PS: And there is still a cosmetic bug in tcpSocketMTfactory.cc:dumpbuf which
I reported about 2 weeks ago...
--
Don't hate yourself in the morning... sleep until noon!