mrfynn at gmx.net ()
2006-08-07 17:27:17 UTC
Hi @all,
Years ago I've ported omniORB 3.0.4 to an embedded system we are using,
a realtime OS for a PowerPC-CPU (8260).
So far so fine. Our system is running properly without any complaints for
4 years now.
Recently we made some changes to our system startup. to make thing run faster. This included changes in the linker-command-file and a new startup-routine in our System (all to make our System run in RAM and no longer in ROM, for speed-up).
With these changes our system encounters a weird crash when we do the following:
1. Establishing a connection to our Corba-interface running on the PowerPC.
(We export the stringified IOR for these purposes, so no IIOP-connection is necessary. Client side: a simple VS 6 console application for tests) doing the following:
1.1. Creating an Object_var out of the sIor by calling string_to_object.
1.2. Narrowing the object-pointer to the designated interface-type.
1.3. Checking for is_nil.
2. Calling one of the methods of our Corba-interface.
3. Destroying the clients orb.
4. Closing client application by returning 0.
Only when the application is doing step 2 the system crash occurs, but only after the client application is closed (after Step 4).
I think there might be some problem when remains of client application are closed after the return.
Can you tell me a point where I can start debugging my software in the server system? Any suggestions are welcome!
Thank you in advance,
Jakob
P.S.: For illustration a simplified code sequence:
int main(int argc, char* argv[])
{
// Step 1.
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "omniORB3");
// ... getting sIor
// Step 1.1.
CORBA::Object_var obj = orb->string_to_object(sIor);
// Step 1.2.
IManager_var ManagerRef = IManager::_narrow(obj);
// Step 1.3.
if( CORBA::is_nil(vManagerRef) )
{
printf("Can't narrow reference to type Manager (or it was nil).\n");
return 1;
}
// Step 2.
ManagerRef->GetSettings();
// Step 3.
orb->destroy();
// Step 4.
return 0;
} // <-- here the client application crashes
Years ago I've ported omniORB 3.0.4 to an embedded system we are using,
a realtime OS for a PowerPC-CPU (8260).
So far so fine. Our system is running properly without any complaints for
4 years now.
Recently we made some changes to our system startup. to make thing run faster. This included changes in the linker-command-file and a new startup-routine in our System (all to make our System run in RAM and no longer in ROM, for speed-up).
With these changes our system encounters a weird crash when we do the following:
1. Establishing a connection to our Corba-interface running on the PowerPC.
(We export the stringified IOR for these purposes, so no IIOP-connection is necessary. Client side: a simple VS 6 console application for tests) doing the following:
1.1. Creating an Object_var out of the sIor by calling string_to_object.
1.2. Narrowing the object-pointer to the designated interface-type.
1.3. Checking for is_nil.
2. Calling one of the methods of our Corba-interface.
3. Destroying the clients orb.
4. Closing client application by returning 0.
Only when the application is doing step 2 the system crash occurs, but only after the client application is closed (after Step 4).
I think there might be some problem when remains of client application are closed after the return.
Can you tell me a point where I can start debugging my software in the server system? Any suggestions are welcome!
Thank you in advance,
Jakob
P.S.: For illustration a simplified code sequence:
int main(int argc, char* argv[])
{
// Step 1.
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "omniORB3");
// ... getting sIor
// Step 1.1.
CORBA::Object_var obj = orb->string_to_object(sIor);
// Step 1.2.
IManager_var ManagerRef = IManager::_narrow(obj);
// Step 1.3.
if( CORBA::is_nil(vManagerRef) )
{
printf("Can't narrow reference to type Manager (or it was nil).\n");
return 1;
}
// Step 2.
ManagerRef->GetSettings();
// Step 3.
orb->destroy();
// Step 4.
return 0;
} // <-- here the client application crashes