Discussion:
[omniORB] Heap error after Visual Studio 2010 upgrade
Peter Danziger
2011-10-20 03:43:17 UTC
Permalink
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.
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
Peter Danziger
2011-10-20 16:22:15 UTC
Permalink
Hi,

I found the problem! The reason for the crash was an old bug in the implementation function of "executeCommand". The heap manager of Visual C++ 2005 seems to be more tolerant than Visual C++ 2010.

Regards,
Volker

From: ***@hotmail.com
To: omniorb-***@omniorb-support.com
Date: Wed, 19 Oct 2011 20:26:30 +0200
Subject: [omniORB] Heap error after Visual Studio 2010 upgrade








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.

...


_______________________________________________
omniORB-list mailing list
omniORB-***@omniorb-support.com
http://www.omniorb-support.com/mailman/listinfo/omniorb-list
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.omniorb-support.com/pipermail/omniorb-list/attachments/20111020/da10353c/attachment.htm
Loading...