[omniORB] Heap error after Visual Studio 2010 upgrade

Peter Danziger p_danziger at hotmail.com
Wed Oct 19 21:26:30 BST 2011


Hi,

I have just upgraded an application from Visual Studio 2005 to Visual Studio 2010 SP1. The omniOrb (4.1.6) was compiled with Visual Studio 2010, too.
After the upgrade, I have reproducable crashes in Corba calls (server side) within the dispatching of the call.

My interface is:



interface
vfiVerifier

{

   typedef sequence<string>
ArgumentSequence;

   string executeCommand( in long commandId,  in ArgumentSequence args ) raises(vfiException);

};


The generated dispatch function looks like this:



::CORBA::Boolean

_impl_vfiVerifier::_dispatch(omniCallHandle&
_handle)

{

  const char* op = _handle.operation_name();

  if( omni::strMatch(op,
"executeCommand") ) {

    _0RL_cd_00a16d14322384bc_20000000
_call_desc(_0RL_lcfn_00a16d14322384bc_30000000, "executeCommand", 15,
1);

    _handle.upcall(this,_call_desc);

    return 1;

  }


The code crashes in the destructor of the _call_desc object with a heap corruption error. 

Call stack:

>    msvcr100.dll!free(void * pBlock=0x01c77891)  Line 51    C
     Verifier.exe!_CORBA_String_var::~_CORBA_String_var()  Line 184 + 0x16 bytes    C++
     Verifier.exe!_0RL_cd_00a16d14322384bc_20000000::~_0RL_cd_00a16d14322384bc_20000000()  + 0x43 bytes    C++
     Verifier.exe!_impl_vfiVerifier::_dispatch(omniCallHandle & _handle={...})  Line 418 + 0x19 bytes    C++
     omniORB416_vc10_rtd.dll!omni::omniOrbPOA::dispatch(omniCallHandle & handle={...}, omniLocalIdentity * id=0x05412df0)  Line 1946 + 0x1e bytes    C++
     omniORB416_vc10_rtd.dll!omniLocalIdentity::dispatch(omniCallHandle & handle={...})  Line 233 + 0x1d bytes    C++
     omniORB416_vc10_rtd.dll!omni::GIOP_S::handleRequest()  Line 370    C++
     omniORB416_vc10_rtd.dll!omni::GIOP_S::dispatcher()  Line 279 + 0x8 bytes    C++
     omniORB416_vc10_rtd.dll!omni::giopWorker::real_execute()  Line 221 + 0xb bytes    C++
     omniORB416_vc10_rtd.dll!omni::giopWorkerInfo::run()  Line 101    C++
     omniORB416_vc10_rtd.dll!omni::giopWorker::execute()  Line 115    C++
     omniORB416_vc10_rtd.dll!omniAsyncWorker::real_run()  Line 233 + 0x14 bytes    C++
     omniORB416_vc10_rtd.dll!omniAsyncWorkerInfo::run()  Line 282    C++
     omniORB416_vc10_rtd.dll!omniAsyncWorker::run(void * __formal=0x00000000)  Line 161    C++
     omnithread34_vc10_rtd.dll!omni_thread_wrapper(void * ptr=0x0a57bca0)  Line 502 + 0x16 bytes    C++
     msvcr100.dll!_callthreadstartex()  Line 314 + 0x6 bytes    C
     msvcr100.dll!_threadstartex(void * ptd=0x04c12220)  Line 292 + 0x5 bytes    C
     kernel32.dll!767b339a()     
     ntdll.dll!77249ed2()     
     ntdll.dll!77249ea5()     

If I remove the line "_handle.upcall(this,_call_desc);", the code doesn't crash (and of course, doesn't dispatch the call).

I never had any problems with Visual Studio 2005. Does anybody have an idea how to fix this problem?

Regards,
Peter

 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.omniorb-support.com/pipermail/omniorb-list/attachments/20111019/3684a7f5/attachment-0001.htm


More information about the omniORB-list mailing list