Stefan Kimmig
2009-07-08 13:57:25 UTC
Hello,
I am using OmniORB 4.1.3 on an AT91SAM9263 processor with realtime kernel 2.6.29.1-rt8, but i got the following problem:
I want to build an soft rt application which communicates via omniorb. This application should be a server and a client at the same time. At the beginning of the application I lock all the memory with the mlockall() command. When I run the application the size of locked memory gets higher and higher and after some time, the processor runs out of ram. Is there a problem of using omniORB in rt application or has anyone tested omniorb in a realtime process?
here ist my programm code:
int main(int argc, char* argv[])
{
// Allocate some memory
int i, page_size;
char* buffer;
mlockall(MCL_CURRENT | MCL_FUTURE )
// Turn off malloc trimming.
mallopt (M_TRIM_THRESHOLD, -1);
// Turn off mmap usage.
mallopt (M_MMAP_MAX, 0);
page_size = sysconf(_SC_PAGESIZE);
buffer = malloc(SOMESIZE);
for (i=0; i < SOMESIZE; i+=page_size)
{
buffer[i] = 0;
}
free(buffer);
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
CORBA:Object_var obj = orb->resolve_initial_references("RootPOA");
PortableServer::POA_var poa = PortableServer::POA::_narrow(obj);
Echo_i* myecho = new Echo_i();
PortableServer::ObjectId_var myechoid = poa->activate_object(myecho);
obj = myecho->_this();
CORBA::String_var sior(orb->object_to_string(obj));
cout << (char*)sior << endl;
PortableServer::POAManager_var pman = poa->the_POAManager();
pman->activate();
return 0;
}
I am using OmniORB 4.1.3 on an AT91SAM9263 processor with realtime kernel 2.6.29.1-rt8, but i got the following problem:
I want to build an soft rt application which communicates via omniorb. This application should be a server and a client at the same time. At the beginning of the application I lock all the memory with the mlockall() command. When I run the application the size of locked memory gets higher and higher and after some time, the processor runs out of ram. Is there a problem of using omniORB in rt application or has anyone tested omniorb in a realtime process?
here ist my programm code:
int main(int argc, char* argv[])
{
// Allocate some memory
int i, page_size;
char* buffer;
mlockall(MCL_CURRENT | MCL_FUTURE )
// Turn off malloc trimming.
mallopt (M_TRIM_THRESHOLD, -1);
// Turn off mmap usage.
mallopt (M_MMAP_MAX, 0);
page_size = sysconf(_SC_PAGESIZE);
buffer = malloc(SOMESIZE);
for (i=0; i < SOMESIZE; i+=page_size)
{
buffer[i] = 0;
}
free(buffer);
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
CORBA:Object_var obj = orb->resolve_initial_references("RootPOA");
PortableServer::POA_var poa = PortableServer::POA::_narrow(obj);
Echo_i* myecho = new Echo_i();
PortableServer::ObjectId_var myechoid = poa->activate_object(myecho);
obj = myecho->_this();
CORBA::String_var sior(orb->object_to_string(obj));
cout << (char*)sior << endl;
PortableServer::POAManager_var pman = poa->the_POAManager();
pman->activate();
return 0;
}
--
Neu: GMX Doppel-FLAT mit Internet-Flatrate + Telefon-Flatrate
f?r nur 19,99 Euro/mtl.!* http://portal.gmx.net/de/go/dsl02
Neu: GMX Doppel-FLAT mit Internet-Flatrate + Telefon-Flatrate
f?r nur 19,99 Euro/mtl.!* http://portal.gmx.net/de/go/dsl02