Peter Danziger
2011-10-20 03:43:17 UTC
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.
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
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