risc risc
2010-04-12 14:32:09 UTC
Hi All,
I have a problem with a server deallocation. I alloc a object in the server
routine and return the ogbect with obj._retn();
when the client destruct the orb, the object allocating in the server
routine is not be deallocated.
the idl is:
module test
{
interface p1
{
attribute string name;
};
interface p2
{
p1 function();
};
};
Server Routine relative P2 interface
test_p2_i::test_p2_i(){
// add extra constructor code here
cout<<"Constructor p2"<<endl;
}
test_p2_i::~test_p2_i(){
// add extra destructor code here
cout<<"destructor p2"<<endl;
}
// Methods corresponding to IDL attributes and operations
test::p1_ptr test_p2_i::function(){
// insert code here and remove the warning
test_p1_i * n=new test_p1_i;
------------------------------> HERE ALLOC THE OBJECT
n->name("ALEX");
test::p1_var ret=n->_this();
return ret._retn();
}
Server Routine relative P1 interface:
test_p1_i::test_p1_i(){
// add extra constructor code here
cout<<"constructor Call"<<endl;
}
test_p1_i::~test_p1_i(){
// add extra destructor code here
cout<<"Destructor Call"<<endl;
}
// Methods corresponding to IDL attributes and operations
void test_p1_i::nome(const char*){
// insert code here and remove the warning
}
char* test_p1_i::nome(){
// insert code here and remove the warning
}
CLIENT:
try {
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
if( argc != 2 ) {
cerr << "usage: eg2_clt <object reference>" << endl;
return 1;
}
CORBA::Object_var obj = orb->string_to_object(argv[1]);
test::p2_var p2=test::p2::_narrow(obj);
if( CORBA::is_nil(p2) ) {
cerr << "Can't narrow reference to type Echo (or it was nil)." <<
endl;
return 1;
}
test::p1_ptr l=p2->function();
l->nome();
CORBA::release(l);
orb->destroy();
AFTER the client run the destruct of p1 object is it not be called why?
there is a bug or i make an error on implementing server/client?
Thanks
R!SC
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.omniorb-support.com/pipermail/omniorb-list/attachments/20100412/8d60c505/attachment.htm
I have a problem with a server deallocation. I alloc a object in the server
routine and return the ogbect with obj._retn();
when the client destruct the orb, the object allocating in the server
routine is not be deallocated.
the idl is:
module test
{
interface p1
{
attribute string name;
};
interface p2
{
p1 function();
};
};
Server Routine relative P2 interface
test_p2_i::test_p2_i(){
// add extra constructor code here
cout<<"Constructor p2"<<endl;
}
test_p2_i::~test_p2_i(){
// add extra destructor code here
cout<<"destructor p2"<<endl;
}
// Methods corresponding to IDL attributes and operations
test::p1_ptr test_p2_i::function(){
// insert code here and remove the warning
test_p1_i * n=new test_p1_i;
------------------------------> HERE ALLOC THE OBJECT
n->name("ALEX");
test::p1_var ret=n->_this();
return ret._retn();
}
Server Routine relative P1 interface:
test_p1_i::test_p1_i(){
// add extra constructor code here
cout<<"constructor Call"<<endl;
}
test_p1_i::~test_p1_i(){
// add extra destructor code here
cout<<"Destructor Call"<<endl;
}
// Methods corresponding to IDL attributes and operations
void test_p1_i::nome(const char*){
// insert code here and remove the warning
}
char* test_p1_i::nome(){
// insert code here and remove the warning
}
CLIENT:
try {
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
if( argc != 2 ) {
cerr << "usage: eg2_clt <object reference>" << endl;
return 1;
}
CORBA::Object_var obj = orb->string_to_object(argv[1]);
test::p2_var p2=test::p2::_narrow(obj);
if( CORBA::is_nil(p2) ) {
cerr << "Can't narrow reference to type Echo (or it was nil)." <<
endl;
return 1;
}
test::p1_ptr l=p2->function();
l->nome();
CORBA::release(l);
orb->destroy();
AFTER the client run the destruct of p1 object is it not be called why?
there is a bug or i make an error on implementing server/client?
Thanks
R!SC
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.omniorb-support.com/pipermail/omniorb-list/attachments/20100412/8d60c505/attachment.htm