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