Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

passing from client a object problem

1 view
Skip to first unread message

John Dash

unread,
Dec 21, 2009, 6:22:00 AM12/21/09
to
Hi All,

I have a problem with omniORB4. I have been make an example that have the
IDL like this:



interface Credenziali
{
attribute string user;
attribute string passwd;
};

enum RET_FUNC{OK,NOT_OK};

interface Accesso
{
RET_FUNC login(in Credenziali crd);
RET_FUNC isLogin();
RET_FUNC LogOut();
};

from client i create an Credenziali_impl object to pass to login member
of the Access remote object the server receive the object fine but after
the executing the routine it in segfault, and i don't know why. The bit
of client and servant are:


//THE SERVANT IS

CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);

// Obtain a reference to the root POA.
CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
PortableServer::POA_var poa = PortableServer::POA::_narrow(obj);

// We allocate the objects on the heap. Since these are reference
// counted objects, they will be deleted by the POA when they are no
// longer needed.
Middleware_Credenziali_i* myMiddleware_Credenziali_i = new
Middleware_Credenziali_i();
Middleware_Accesso_i* myMiddleware_Accesso_i = new
Middleware_Accesso_i();


// Activate the objects. This tells the POA that the objects are
// ready to accept requests.
PortableServer::ObjectId_var myMiddleware_Credenziali_iid = poa-
>activate_object(myMiddleware_Credenziali_i);
PortableServer::ObjectId_var myMiddleware_Accesso_iid = poa-
>activate_object(myMiddleware_Accesso_i);

// Obtain a reference to each object and output the stringified
// IOR to stdout
{
// IDL interface: Middleware::Credenziali
CORBA::Object_var ref = myMiddleware_Credenziali_i->_this();
CORBA::String_var sior(orb->object_to_string(ref));
std::cout << "IDL object Middleware::Credenziali IOR = '" << (char*)
sior << "'" << std::endl;
}

{
// IDL interface: Middleware::Accesso
CORBA::Object_var ref = myMiddleware_Accesso_i->_this();
CORBA::String_var sior(orb->object_to_string(ref));
std::cout << "IDL object Middleware::Accesso IOR = '" << (char*)
sior << "'" << std::endl;
}


//END SERVANT

OBJECT IMPLEMANTATION OF ACCESS:


Middleware::RET_FUNC Middleware_Accesso_i::login
(Middleware::Credenziali_ptr crd){

char * ut;
ut=crd->utente();
cout<<ut<<endl;
return Middleware::OK;
}


//END OBJECT IMPLEMENTATION


//CLIENT SOWTWARE


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]);


Accesso_var login=Accesso::_narrow(obj);

if( CORBA::is_nil(login) ) {
cerr << "Can't narrow reference to type Echo (or it was nil)." <<
endl;
return 1;
}


obj = orb->resolve_initial_references("RootPOA");
PortableServer::POA_var poa = PortableServer::POA::_narrow(obj);
PortableServer::POAManager_var pman = poa->the_POAManager();
pman->activate();



Accesso_ptr login_ptr;
login_ptr=login;
Credenziali_ptr c;

Middleware_Credenziali_i *n=new Middleware_Credenziali_i;

c=n->_this();

c->utente("BUNNY");
c->passwd("BUGS");

Middleware::RET_FUNC ok= login_ptr->login(c);

orb->destroy();


//END CLIENT

At Run Time the servant print the name of user BUNNY after it go in
segfault .

I have make an error on the client?


Thanks
Best Regards & Happy Cristmans


0 new messages