[omniORB] Object To String (O2S) conversion problem
Gregory Giguashvili
Gregoryg@ParadigmGeo.com
Mon Aug 19 10:02:01 2002
This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.
------_=_NextPart_000_01C24767.0773D330
Content-Type: text/plain;
charset="iso-8859-1"
Please, forgive me, but our antivirus software chose to remove the
attachment from my e-mail (because of some problem on our server), so I'm
sending it to you once more (unpacked this time).
Thanks a lot and sorry for the inconvinience.
Giga
<<O2S.idl>> <<O2S.pure>> <<O2S_i.cc>> <<O2SSK.cc>> <<O2SH.h>>
> -----Original Message-----
> From: Gregory Giguashvili
> Sent: Monday, August 19, 2002 11:53 AM
> To: OMNI ORB Mailing List (E-mail)
> Subject: Object To String (O2S) conversion problem
>
> Hello,
>
> I'm using omniORB 3.0.4 snapshot dated 25-April-2002. Recently, I came
> across a problem on SGI platform, which generated SIGPIPE in my programs.
> After investigating it a little, I came to the conclusion that the problem
> seems to be in the profile creation in omniORB and this is why...
>
> 1) I attach a sample program, which contains interface and its
> implementation generated by the IDL compiler (no add-ons).
> 2) I attach a trace generated when running this program using Valgrind
> open-source "Purify" like product for Linux. (Though, I mentioned that the
> problem was on SGI platform, SGI Purify and Valgrind gave similar output
> for this test program. I chose to provide you with Valgrind output since I
> think it's a GREAT product and it really helps to find problems). Refer to
> the following link for further information:
> http://developer.kde.org/~sewardj/
> 3) As you can see from the trace, it complains that there is uninitialized
> memory read each time I use IOR returned by object_to_string function. In
> my "real" application, I used to transfer this IOR string as an argument
> to some IDL call. On SGI platforms, calling a send system call with
> uninitialized string causes SIGPIPE in some cases.
> 4) After investigating this problem a little, I came to the following
> conclusions:
> - The problem doesn't seem to be in IOP::iorToEncapStr function, rather
> it seems to be in the profile buffer provided to this function as the
> argument.
> - The problem doesn't occur for all IPs (this almost drove me crazy
> since it happened on certain machines only). I checked this on a
> standalone laptop, which was assigned different IPs every time. The
> following IP: 198.0.0.1 doesn't cause the problem, while 206.109.128.192
> does.
>
> I sure hope there is a known fix for this problem, though I find it hard
> to beleive that someone noticed it because of its weirdness.
>
> Thanks a lot in advance.
> Giga
> P.S.
>
> O2S.tgz file contains the following:
> O2S.idl - sample IDL file
> O2S.pure - the output from Valgrind
> O2S_i.cc - implementation generated by IDL compiler
> O2SH.h, O2SSK.cc - IDL generated sources
>
>
>
------_=_NextPart_000_01C24767.0773D330
Content-Type: application/octet-stream;
name="O2S.idl"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="O2S.idl"
interface Pinger {=0A=
void ping ();=0A=
};=0A=
=0A=
------_=_NextPart_000_01C24767.0773D330
Content-Type: application/octet-stream;
name="O2S.pure"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="O2S.pure"
valgrind's libpthread.so: IGNORED call to: pthread_attr_destroy=0A=
valgrind's libpthread.so: IGNORED call to: pthread_attr_destroy=0A=
valgrind's libpthread.so: IGNORED call to: pthread_attr_destroy=0A=
=3D=3D10825=3D=3D Conditional jump or move depends on uninitialised =
value(s)=0A=
=3D=3D10825=3D=3D at 0x40349ECA: IOP::iorToEncapStr(unsigned char =
const *, _CORBA_Unbounded_Sequence<IOP::TaggedProfile> const *) =
(../ior.cc:141)=0A=
=3D=3D10825=3D=3D by 0x4034B45E: =
omniURI::objectToString(CORBA::Object *) (../uri.cc:115)=0A=
=3D=3D10825=3D=3D by 0x4033CB69: =
omniOrbORB::object_to_string(CORBA::Object *) (../corbaOrb.cc:428)=0A=
=3D=3D10825=3D=3D by 0x80503C5: main =
(/home/gregoryg/project/src/subsystem/O2S/O2S_i.cc:69)=0A=
=3D=3D10825=3D=3D by 0x40932507: __libc_start_main =
(../sysdeps/generic/libc-start.c:129)=0A=
=3D=3D10825=3D=3D by 0x804F681: _IO_file_write@@GLIBC_2.1 (in =
/home/gregoryg/project/product/Linux-2.2/exe/O2S)=0A=
=3D=3D10825=3D=3D =0A=
=3D=3D10825=3D=3D Conditional jump or move depends on uninitialised =
value(s)=0A=
=3D=3D10825=3D=3D at 0x40349F03: IOP::iorToEncapStr(unsigned char =
const *, _CORBA_Unbounded_Sequence<IOP::TaggedProfile> const *) =
(../ior.cc:146)=0A=
=3D=3D10825=3D=3D by 0x4034B45E: =
omniURI::objectToString(CORBA::Object *) (../uri.cc:115)=0A=
=3D=3D10825=3D=3D by 0x4033CB69: =
omniOrbORB::object_to_string(CORBA::Object *) (../corbaOrb.cc:428)=0A=
=3D=3D10825=3D=3D by 0x80503C5: main =
(/home/gregoryg/project/src/subsystem/O2S/O2S_i.cc:69)=0A=
=3D=3D10825=3D=3D by 0x40932507: __libc_start_main =
(../sysdeps/generic/libc-start.c:129)=0A=
=3D=3D10825=3D=3D by 0x804F681: _IO_file_write@@GLIBC_2.1 (in =
/home/gregoryg/project/product/Linux-2.2/exe/O2S)=0A=
=3D=3D10825=3D=3D =0A=
=3D=3D10825=3D=3D Conditional jump or move depends on uninitialised =
value(s)=0A=
=3D=3D10825=3D=3D at 0x8052516: ostream::operator<<(char const *) =
(../../../libio/iostream.cc:772)=0A=
=3D=3D10825=3D=3D by 0x805040A: main =
(/home/gregoryg/project/src/subsystem/O2S/O2S_i.cc:70)=0A=
=3D=3D10825=3D=3D by 0x40932507: __libc_start_main =
(../sysdeps/generic/libc-start.c:129)=0A=
=3D=3D10825=3D=3D by 0x804F681: _IO_file_write@@GLIBC_2.1 (in =
/home/gregoryg/project/product/Linux-2.2/exe/O2S)=0A=
=3D=3D10825=3D=3D =0A=
=3D=3D10825=3D=3D Conditional jump or move depends on uninitialised =
value(s)=0A=
=3D=3D10825=3D=3D at 0x805251C: ostream::operator<<(char const *) =
(../../../libio/iostream.cc:772)=0A=
=3D=3D10825=3D=3D by 0x805040A: main =
(/home/gregoryg/project/src/subsystem/O2S/O2S_i.cc:70)=0A=
=3D=3D10825=3D=3D by 0x40932507: __libc_start_main =
(../sysdeps/generic/libc-start.c:129)=0A=
=3D=3D10825=3D=3D by 0x804F681: _IO_file_write@@GLIBC_2.1 (in =
/home/gregoryg/project/product/Linux-2.2/exe/O2S)=0A=
=3D=3D10825=3D=3D =0A=
=3D=3D10825=3D=3D Conditional jump or move depends on uninitialised =
value(s)=0A=
=3D=3D10825=3D=3D at 0x8052525: ostream::operator<<(char const *) =
(../../../libio/iostream.cc:772)=0A=
=3D=3D10825=3D=3D by 0x805040A: main =
(/home/gregoryg/project/src/subsystem/O2S/O2S_i.cc:70)=0A=
=3D=3D10825=3D=3D by 0x40932507: __libc_start_main =
(../sysdeps/generic/libc-start.c:129)=0A=
=3D=3D10825=3D=3D by 0x804F681: _IO_file_write@@GLIBC_2.1 (in =
/home/gregoryg/project/product/Linux-2.2/exe/O2S)=0A=
=3D=3D10825=3D=3D =0A=
=3D=3D10825=3D=3D Conditional jump or move depends on uninitialised =
value(s)=0A=
=3D=3D10825=3D=3D at 0x805252F: ostream::operator<<(char const *) =
(../../../libio/iostream.cc:772)=0A=
=3D=3D10825=3D=3D by 0x805040A: main =
(/home/gregoryg/project/src/subsystem/O2S/O2S_i.cc:70)=0A=
=3D=3D10825=3D=3D by 0x40932507: __libc_start_main =
(../sysdeps/generic/libc-start.c:129)=0A=
=3D=3D10825=3D=3D by 0x804F681: _IO_file_write@@GLIBC_2.1 (in =
/home/gregoryg/project/product/Linux-2.2/exe/O2S)=0A=
=3D=3D10825=3D=3D =0A=
=3D=3D10825=3D=3D Syscall param write(buf) contains uninitialised or =
unaddressable byte(s)=0A=
=3D=3D10825=3D=3D at 0x409F6584: __libc_write (in =
/lib/i686/libc-2.2.4.so)=0A=
=3D=3D10825=3D=3D by 0x40992465: _IO_file_write@@GLIBC_2.1 =
(fileops.c:883)=0A=
=3D=3D10825=3D=3D by 0x805500C: filebuf::sys_write(char const *, =
int) (../../../libio/filebuf.cc:191)=0A=
=3D=3D10825=3D=3D by 0x409924F9: new_do_write (fileops.c:465)=0A=
=3D=3D10825=3D=3D by 0x409920CF: _IO_do_write@@GLIBC_2.1 =
(fileops.c:438)=0A=
=3D=3D10825=3D=3D by 0x409917B8: _IO_file_sync@@GLIBC_2.1 =
(fileops.c:633)=0A=
=3D=3D10825=3D=3D by 0x8054F74: filebuf::sync(void) =
(../../../libio/filebuf.cc:166)=0A=
=3D=3D10825=3D=3D by 0x8052907: ostream::flush(void) =
(../../../libio/iostream.cc:864)=0A=
=3D=3D10825=3D=3D by 0x8052930: flush(ostream &) (../../../libio/iost=
ream.cc:872)=0A=
=3D=3D10825=3D=3D by 0x8052AA4: endl(ostream &) =
(../../../libio/iostream.cc:916)=0A=
=3D=3D10825=3D=3D by 0x80535DC: ostream::operator<<(ostream =
&(*)(ostream &)) (../../../libio/iostream.h:106)=0A=
=3D=3D10825=3D=3D by 0x8050420: main =
(/home/gregoryg/project/src/subsystem/O2S/O2S_i.cc:70)=0A=
=3D=3D10825=3D=3D by 0x40932507: __libc_start_main =
(../sysdeps/generic/libc-start.c:129)=0A=
=3D=3D10825=3D=3D by 0x804F681: _IO_file_write@@GLIBC_2.1 (in =
/home/gregoryg/project/product/Linux-2.2/exe/O2S)=0A=
=3D=3D10825=3D=3D Address 0x41A5B099 is not stack'd, malloc'd or =
free'd=0A=
IDL object Pinger IOR =3D =
'IOR:010000000f00000049444c3a50696e6765723a312e30000001000000000000002e0=
0000001010000100000003230362e3130392e3132382e31363600648000000e000000fec=
33be63c00002a490000000000'=0A=
------_=_NextPart_000_01C24767.0773D330
Content-Type: application/octet-stream;
name="O2S_i.cc"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="O2S_i.cc"
//=0A=
// Example code for implementing IDL interfaces in file =
./LockClient/O2S.idl=0A=
//=0A=
=0A=
#include <iostream.h>=0A=
#include <O2SH.h>=0A=
=0A=
//=0A=
// Example class implementing IDL interface Pinger=0A=
//=0A=
class Pinger_i: public POA_Pinger,=0A=
public PortableServer::RefCountServantBase {=0A=
private:=0A=
// Make sure all instances are built on the heap by making the=0A=
// destructor non-public=0A=
//virtual ~Pinger_i();=0A=
public:=0A=
// standard constructor=0A=
Pinger_i();=0A=
virtual ~Pinger_i();=0A=
=0A=
// methods corresponding to defined IDL attributes and operations=0A=
void ping();=0A=
=0A=
};=0A=
=0A=
//=0A=
// Example implementational code for IDL interface Pinger=0A=
//=0A=
Pinger_i::Pinger_i(){=0A=
// add extra constructor code here=0A=
}=0A=
Pinger_i::~Pinger_i(){=0A=
// add extra destructor code here=0A=
}=0A=
// Methods corresponding to IDL attributes and operations=0A=
void Pinger_i::ping(){=0A=
// insert code here and remove the warning=0A=
#warning "Code missing in function <void Pinger_i::ping()>"=0A=
}=0A=
=0A=
// End of example implementational code=0A=
=0A=
int main(int argc, char** argv)=0A=
{=0A=
try {=0A=
// Initialise the ORB.=0A=
CORBA::ORB_var orb =3D CORBA::ORB_init(argc, argv, "omniORB3");=0A=
=0A=
// Obtain a reference to the root POA.=0A=
CORBA::Object_var obj =3D =
orb->resolve_initial_references("RootPOA");=0A=
PortableServer::POA_var poa =3D =
PortableServer::POA::_narrow(obj);=0A=
=0A=
// We allocate the objects on the heap. Since these are =
reference=0A=
// counted objects, they will be deleted by the POA when they are =
no=0A=
// longer needed.=0A=
Pinger_i* myPinger_i =3D new Pinger_i();=0A=
=0A=
// Activate the objects. This tells the POA that the objects =
are=0A=
// ready to accept requests.=0A=
PortableServer::ObjectId_var myPinger_iid =3D =
poa->activate_object(myPinger_i);=0A=
=0A=
// Obtain a reference to each object and output the stringified=0A=
// IOR to stdout=0A=
{=0A=
// IDL interface: Pinger=0A=
//CORBA::Object_var ref =3D myPinger_i->_this();=0A=
Pinger_var ref =3D myPinger_i->_this ();=0A=
CORBA::String_var sior(orb->object_to_string(ref));=0A=
cout << "IDL object Pinger IOR =3D '" << (char*)sior << "'" << =
endl;=0A=
}=0A=
=0A=
// Obtain a POAManager, and tell the POA to start accepting=0A=
// requests on its objects.=0A=
PortableServer::POAManager_var pman =3D poa->the_POAManager();=0A=
pman->activate();=0A=
=0A=
orb->run();=0A=
orb->destroy();=0A=
}=0A=
catch(CORBA::SystemException&) {=0A=
cerr << "Caught CORBA::SystemException." << endl;=0A=
}=0A=
catch(CORBA::Exception&) {=0A=
cerr << "Caught CORBA::Exception." << endl;=0A=
}=0A=
catch(omniORB::fatalException& fe) {=0A=
cerr << "Caught omniORB::fatalException:" << endl;=0A=
cerr << " file: " << fe.file() << endl;=0A=
cerr << " line: " << fe.line() << endl;=0A=
cerr << " mesg: " << fe.errmsg() << endl;=0A=
}=0A=
catch(...) {=0A=
cerr << "Caught unknown exception." << endl;=0A=
}=0A=
=0A=
return 0;=0A=
}=0A=
------_=_NextPart_000_01C24767.0773D330
Content-Type: application/octet-stream;
name="O2SSK.cc"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="O2SSK.cc"
// This file is generated by omniidl (C++ backend)- omniORB_3_0. Do not =
edit.=0A=
=0A=
#include "O2SH.h"=0A=
#include <omniORB3/callDescriptor.h>=0A=
=0A=
static const char* _0RL_library_version =3D omniORB_3_0;=0A=
=0A=
Pinger_ptr Pinger_Helper::_nil() {=0A=
return Pinger::_nil();=0A=
}=0A=
=0A=
CORBA::Boolean Pinger_Helper::is_nil(Pinger_ptr p) {=0A=
return CORBA::is_nil(p);=0A=
=0A=
}=0A=
=0A=
void Pinger_Helper::release(Pinger_ptr p) {=0A=
CORBA::release(p);=0A=
}=0A=
=0A=
void Pinger_Helper::duplicate(Pinger_ptr p) {=0A=
if( p && !p->_NP_is_nil() ) omni::duplicateObjRef(p);=0A=
}=0A=
=0A=
size_t Pinger_Helper::NP_alignedSize(Pinger_ptr obj, size_t offset) =
{=0A=
return Pinger::_alignedSize(obj, offset);=0A=
}=0A=
=0A=
void Pinger_Helper::marshalObjRef(Pinger_ptr obj, NetBufferedStream& s) =
{=0A=
Pinger::_marshalObjRef(obj, s);=0A=
}=0A=
=0A=
Pinger_ptr Pinger_Helper::unmarshalObjRef(NetBufferedStream& s) {=0A=
return Pinger::_unmarshalObjRef(s);=0A=
}=0A=
=0A=
void Pinger_Helper::marshalObjRef(Pinger_ptr obj, MemBufferedStream& s) =
{=0A=
Pinger::_marshalObjRef(obj, s);=0A=
}=0A=
=0A=
Pinger_ptr Pinger_Helper::unmarshalObjRef(MemBufferedStream& s) {=0A=
return Pinger::_unmarshalObjRef(s);=0A=
}=0A=
=0A=
Pinger_ptr=0A=
Pinger::_duplicate(Pinger_ptr obj)=0A=
{=0A=
if( obj && !obj->_NP_is_nil() ) omni::duplicateObjRef(obj);=0A=
=0A=
return obj;=0A=
}=0A=
=0A=
Pinger_ptr=0A=
Pinger::_narrow(CORBA::Object_ptr obj)=0A=
{=0A=
if( !obj || obj->_NP_is_nil() || obj->_NP_is_pseudo() ) return =
_nil();=0A=
_ptr_type e =3D (_ptr_type) =
obj->_PR_getobj()->_realNarrow(_PD_repoId);=0A=
return e ? e : _nil();=0A=
}=0A=
=0A=
Pinger_ptr=0A=
Pinger::_unchecked_narrow(CORBA::Object_ptr obj)=0A=
{=0A=
if( !obj || obj->_NP_is_nil() || obj->_NP_is_pseudo() ) return =
_nil();=0A=
_ptr_type e =3D (_ptr_type) =
obj->_PR_getobj()->_uncheckedNarrow(_PD_repoId);=0A=
return e ? e : _nil();=0A=
}=0A=
=0A=
Pinger_ptr=0A=
Pinger::_nil()=0A=
{=0A=
static _objref_Pinger* _the_nil_ptr =3D 0;=0A=
if( !_the_nil_ptr ) {=0A=
omni::nilRefLock().lock();=0A=
if( !_the_nil_ptr ) _the_nil_ptr =3D new _objref_Pinger;=0A=
omni::nilRefLock().unlock();=0A=
}=0A=
return _the_nil_ptr;=0A=
}=0A=
=0A=
const char* Pinger::_PD_repoId =3D "IDL:Pinger:1.0";=0A=
=0A=
_objref_Pinger::~_objref_Pinger() {}=0A=
=0A=
_objref_Pinger::_objref_Pinger(const char* mdri,=0A=
IOP::TaggedProfileList* p, omniIdentity* id, omniLocalIdentity* lid) =
:=0A=
=0A=
omniObjRef(Pinger::_PD_repoId, mdri, p, id, lid)=0A=
{=0A=
_PR_setobj(this);=0A=
}=0A=
=0A=
void*=0A=
_objref_Pinger::_ptrToObjRef(const char* id)=0A=
{=0A=
if( !strcmp(id, CORBA::Object::_PD_repoId) )=0A=
return (CORBA::Object_ptr) this;=0A=
if( !strcmp(id, Pinger::_PD_repoId) )=0A=
return (Pinger_ptr) this;=0A=
=0A=
return 0;=0A=
}=0A=
=0A=
// Local call call-back function.=0A=
static void=0A=
_0RL_lcfn_efacbc7601d601ed_00000000(omniCallDescriptor* cd, =
omniServant* svnt)=0A=
{=0A=
=0A=
_impl_Pinger* impl =3D (_impl_Pinger*) =
svnt->_ptrToInterface(Pinger::_PD_repoId);=0A=
impl->ping();=0A=
}=0A=
=0A=
void _objref_Pinger::ping()=0A=
{=0A=
omniStdCallDesc::void_call =
_call_desc(_0RL_lcfn_efacbc7601d601ed_00000000, "ping", 5, 0);=0A=
=0A=
_invoke(_call_desc);=0A=
=0A=
}=0A=
=0A=
_pof_Pinger::~_pof_Pinger() {}=0A=
=0A=
omniObjRef*=0A=
_pof_Pinger::newObjRef(const char* mdri, IOP::TaggedProfileList* p,=0A=
omniIdentity* id, omniLocalIdentity* lid)=0A=
{=0A=
return new _objref_Pinger(mdri, p, id, lid);=0A=
}=0A=
=0A=
CORBA::Boolean=0A=
_pof_Pinger::is_a(const char* id) const=0A=
{=0A=
if( !strcmp(id, Pinger::_PD_repoId) )=0A=
return 1;=0A=
=0A=
return 0;=0A=
}=0A=
=0A=
const _pof_Pinger _the_pof_Pinger;=0A=
=0A=
_impl_Pinger::~_impl_Pinger() {}=0A=
=0A=
CORBA::Boolean=0A=
_impl_Pinger::_dispatch(GIOP_S& giop_s)=0A=
{=0A=
if( !strcmp(giop_s.operation(), "ping") ) {=0A=
=0A=
giop_s.RequestReceived();=0A=
=0A=
this->ping();=0A=
=0A=
if( giop_s.response_expected() ) {=0A=
size_t msgsize =3D (size_t) GIOP_S::ReplyHeaderSize();=0A=
=0A=
giop_s.InitialiseReply(GIOP::NO_EXCEPTION, (CORBA::ULong) =
msgsize);=0A=
=0A=
}=0A=
giop_s.ReplyCompleted();=0A=
return 1;=0A=
}=0A=
=0A=
return 0;=0A=
}=0A=
=0A=
void*=0A=
_impl_Pinger::_ptrToInterface(const char* id)=0A=
{=0A=
if( !strcmp(id, CORBA::Object::_PD_repoId) )=0A=
return (void*) 1;=0A=
if( !strcmp(id, Pinger::_PD_repoId) )=0A=
return (_impl_Pinger*) this;=0A=
=0A=
return 0;=0A=
}=0A=
=0A=
const char*=0A=
_impl_Pinger::_mostDerivedRepoId()=0A=
{=0A=
return Pinger::_PD_repoId;=0A=
}=0A=
=0A=
POA_Pinger::~POA_Pinger() {}=0A=
=0A=
------_=_NextPart_000_01C24767.0773D330
Content-Type: application/octet-stream;
name="O2SH.h"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="O2SH.h"
// This file is generated by omniidl (C++ backend)- omniORB_3_0. Do not =
edit.=0A=
#ifndef __O2S_hh__=0A=
#define __O2S_hh__=0A=
=0A=
#ifndef USE_omniORB_logStream=0A=
#define USE_omniORB_logStream=0A=
#endif=0A=
=0A=
#ifndef __CORBA_H_EXTERNAL_GUARD__=0A=
#include <omniORB3/CORBA.h>=0A=
#endif=0A=
=0A=
#ifndef USE_core_stub_in_nt_dll=0A=
# define USE_core_stub_in_nt_dll_NOT_DEFINED_O2S=0A=
#endif=0A=
#ifndef USE_dyn_stub_in_nt_dll=0A=
# define USE_dyn_stub_in_nt_dll_NOT_DEFINED_O2S=0A=
#endif=0A=
=0A=
#ifdef USE_stub_in_nt_dll=0A=
#ifndef USE_core_stub_in_nt_dll=0A=
#define USE_core_stub_in_nt_dll=0A=
#endif=0A=
#ifndef USE_dyn_stub_in_nt_dll=0A=
#define USE_dyn_stub_in_nt_dll=0A=
#endif=0A=
#endif=0A=
=0A=
#ifdef _core_attr=0A=
# error "A local CPP macro _core_attr has already been defined."=0A=
#else=0A=
# ifdef USE_core_stub_in_nt_dll=0A=
# define _core_attr _OMNIORB_NTDLL_IMPORT=0A=
# else=0A=
# define _core_attr=0A=
# endif=0A=
#endif=0A=
=0A=
#ifdef _dyn_attr=0A=
# error "A local CPP macro _dyn_attr has already been defined."=0A=
#else=0A=
# ifdef USE_dyn_stub_in_nt_dll=0A=
# define _dyn_attr _OMNIORB_NTDLL_IMPORT=0A=
# else=0A=
# define _dyn_attr=0A=
# endif=0A=
#endif=0A=
=0A=
#ifndef __Pinger__=0A=
#define __Pinger__=0A=
=0A=
class Pinger;=0A=
class _objref_Pinger;=0A=
class _impl_Pinger;=0A=
=0A=
typedef _objref_Pinger* Pinger_ptr;=0A=
typedef Pinger_ptr PingerRef;=0A=
=0A=
class Pinger_Helper {=0A=
public:=0A=
typedef Pinger_ptr _ptr_type;=0A=
=0A=
static _ptr_type _nil();=0A=
static _CORBA_Boolean is_nil(_ptr_type);=0A=
static void release(_ptr_type);=0A=
static void duplicate(_ptr_type);=0A=
static size_t NP_alignedSize(_ptr_type, size_t);=0A=
static void marshalObjRef(_ptr_type, NetBufferedStream&);=0A=
static _ptr_type unmarshalObjRef(NetBufferedStream&);=0A=
static void marshalObjRef(_ptr_type, MemBufferedStream&);=0A=
static _ptr_type unmarshalObjRef(MemBufferedStream&);=0A=
};=0A=
=0A=
typedef _CORBA_ObjRef_Var<_objref_Pinger, Pinger_Helper> Pinger_var;=0A=
typedef _CORBA_ObjRef_OUT_arg<_objref_Pinger,Pinger_Helper > =
Pinger_out;=0A=
=0A=
#endif=0A=
=0A=
class Pinger {=0A=
public:=0A=
// Declarations for this interface type.=0A=
typedef Pinger_ptr _ptr_type;=0A=
typedef Pinger_var _var_type;=0A=
=0A=
static _ptr_type _duplicate(_ptr_type);=0A=
static _ptr_type _narrow(CORBA::Object_ptr);=0A=
static _ptr_type _unchecked_narrow(CORBA::Object_ptr);=0A=
static _ptr_type _nil();=0A=
=0A=
static inline size_t _alignedSize(_ptr_type, size_t);=0A=
static inline void _marshalObjRef(_ptr_type, NetBufferedStream&);=0A=
static inline void _marshalObjRef(_ptr_type, MemBufferedStream&);=0A=
=0A=
static inline _ptr_type _unmarshalObjRef(NetBufferedStream& s) {=0A=
CORBA::Object_ptr obj =3D CORBA::UnMarshalObjRef(_PD_repoId, s);=0A=
_ptr_type result =3D _narrow(obj);=0A=
CORBA::release(obj);=0A=
return result;=0A=
}=0A=
=0A=
static inline _ptr_type _unmarshalObjRef(MemBufferedStream& s) {=0A=
CORBA::Object_ptr obj =3D CORBA::UnMarshalObjRef(_PD_repoId, s);=0A=
_ptr_type result =3D _narrow(obj);=0A=
CORBA::release(obj);=0A=
return result;=0A=
}=0A=
=0A=
static _core_attr const char* _PD_repoId;=0A=
=0A=
// Other IDL defined within this scope.=0A=
=0A=
};=0A=
=0A=
class _objref_Pinger :=0A=
public virtual CORBA::Object, public virtual omniObjRef=0A=
{=0A=
public:=0A=
void ping();=0A=
=0A=
inline _objref_Pinger() { _PR_setobj(0); } // nil=0A=
_objref_Pinger(const char*, IOP::TaggedProfileList*, omniIdentity*, =
omniLocalIdentity*);=0A=
=0A=
protected:=0A=
virtual ~_objref_Pinger();=0A=
=0A=
private:=0A=
virtual void* _ptrToObjRef(const char*);=0A=
=0A=
_objref_Pinger(const _objref_Pinger&);=0A=
_objref_Pinger& operator =3D (const _objref_Pinger&);=0A=
// not implemented=0A=
};=0A=
=0A=
class _pof_Pinger : public proxyObjectFactory {=0A=
public:=0A=
inline _pof_Pinger() : proxyObjectFactory(Pinger::_PD_repoId) {}=0A=
virtual ~_pof_Pinger();=0A=
=0A=
virtual omniObjRef* newObjRef(const char*, =
IOP::TaggedProfileList*,=0A=
omniIdentity*, omniLocalIdentity*);=0A=
virtual _CORBA_Boolean is_a(const char*) const;=0A=
};=0A=
=0A=
class _impl_Pinger :=0A=
public virtual omniServant=0A=
{=0A=
public:=0A=
virtual ~_impl_Pinger();=0A=
=0A=
virtual void ping() =3D 0;=0A=
=0A=
public: // Really protected, workaround for xlC=0A=
virtual _CORBA_Boolean _dispatch(GIOP_S&);=0A=
=0A=
private:=0A=
virtual void* _ptrToInterface(const char*);=0A=
virtual const char* _mostDerivedRepoId();=0A=
};=0A=
=0A=
class POA_Pinger :=0A=
public virtual _impl_Pinger,=0A=
public virtual PortableServer::ServantBase=0A=
{=0A=
public:=0A=
virtual ~POA_Pinger();=0A=
=0A=
inline Pinger_ptr _this() {=0A=
return (Pinger_ptr) _do_this(Pinger::_PD_repoId);=0A=
}=0A=
};=0A=
=0A=
#undef _core_attr=0A=
#undef _dyn_attr=0A=
=0A=
inline size_t=0A=
Pinger::_alignedSize(Pinger_ptr obj, size_t offset) {=0A=
return CORBA::AlignedObjRef(obj, _PD_repoId, 15, offset);=0A=
}=0A=
=0A=
inline void=0A=
Pinger::_marshalObjRef(Pinger_ptr obj, NetBufferedStream& s) {=0A=
CORBA::MarshalObjRef(obj, _PD_repoId, 15, s);=0A=
}=0A=
=0A=
inline void=0A=
Pinger::_marshalObjRef(Pinger_ptr obj, MemBufferedStream& s) {=0A=
CORBA::MarshalObjRef(obj, _PD_repoId, 15, s);=0A=
}=0A=
=0A=
#ifdef USE_core_stub_in_nt_dll_NOT_DEFINED_O2S=0A=
# undef USE_core_stub_in_nt_dll=0A=
# undef USE_core_stub_in_nt_dll_NOT_DEFINED_O2S=0A=
#endif=0A=
#ifdef USE_dyn_stub_in_nt_dll_NOT_DEFINED_O2S=0A=
# undef USE_dyn_stub_in_nt_dll=0A=
# undef USE_dyn_stub_in_nt_dll_NOT_DEFINED_O2S=0A=
#endif=0A=
=0A=
#endif // __O2S_hh__=0A=
=0A=
------_=_NextPart_000_01C24767.0773D330--