[Ace-users] Re: Access violation if handling a structure containing an octet sequence length > 2604 bytes

arne.berger at gmx.de arne.berger at gmx.de
Wed Aug 22 04:56:11 CDT 2007


Hallo Johnny

I could not reproduce this affect with a small sample. However with
using the codeguard tool I found out that the allocation and
deallocation is done from different RTL's. Here are the messages from
codeguard:


------------------------------------------
Error 00059. 0x340010 (r) (Thread 0x0D8C):
Resource from different RTL:
delete[](0x019FC090)

Call Tree:
   0x00625D07(=TAO_BD.DLL:0x01:004D07) ..\tao/
Unbounded_Value_Allocation_Traits_T.h#45
   0x00625CF7(=TAO_BD.DLL:0x01:004CF7) ..\tao/
Unbounded_Octet_Sequence_T.h#250
   0x00625CDA(=TAO_BD.DLL:0x01:004CDA) ..\tao/
Unbounded_Octet_Sequence_T.h#76
   0x00683BFA(=TAO_BD.DLL:0x01:062BFA) ..\tao/
Unbounded_Octet_Sequence_T.h#264
   0x00489961(=PhysicsDataMng.exe:0x01:088961) D:\Programme\Borland\BDS
\4.0\ACETAO\\include\tao/Unbounded_Sequence_CDR_T.h#119
   0x00489872(=PhysicsDataMng.exe:0x01:088872) sourcescpp
\sim_common_c.cpp#3397

The object array (0x019FC090) [size: 2604 bytes] was created with
new[]
Call Tree:
   0x004492CC(=PhysicsDataMng.exe:0x01:0482CC) D:\Programme\Borland\BDS
\4.0\ACETAO\\include\tao/Unbounded_Value_Allocation_Traits_T.h#40
   0x00441318(=PhysicsDataMng.exe:0x01:040318) D:\Programme\Borland\BDS
\4.0\ACETAO\\include\tao/Unbounded_Octet_Sequence_T.h#247
   0x004350EC(=PhysicsDataMng.exe:0x01:0340EC) D:\Programme\Borland\BDS
\4.0\ACETAO\\include\tao/Unbounded_Octet_Sequence_T.h#57
   0x004898E2(=PhysicsDataMng.exe:0x01:0888E2) D:\Programme\Borland\BDS
\4.0\ACETAO\\include\tao/Unbounded_Sequence_CDR_T.h#111
   0x00489872(=PhysicsDataMng.exe:0x01:088872) sourcescpp
\sim_common_c.cpp#3397
   0x00489AAF(=PhysicsDataMng.exe:0x01:088AAF) sourcescpp
\sim_common_c.cpp#3425

------------------------------------------
Error 00058. 0x340010 (r) (Thread 0x0D8C):
Resource from different RTL:
delete[](0x01A0CAD0)

Call Tree:
   0x00625D07(=TAO_BD.DLL:0x01:004D07) ..\tao/
Unbounded_Value_Allocation_Traits_T.h#45
   0x00625CF7(=TAO_BD.DLL:0x01:004CF7) ..\tao/
Unbounded_Octet_Sequence_T.h#250
   0x00625CDA(=TAO_BD.DLL:0x01:004CDA) ..\tao/
Unbounded_Octet_Sequence_T.h#76
   0x00683BFA(=TAO_BD.DLL:0x01:062BFA) ..\tao/
Unbounded_Octet_Sequence_T.h#264
   0x00489961(=PhysicsDataMng.exe:0x01:088961) D:\Programme\Borland\BDS
\4.0\ACETAO\\include\tao/Unbounded_Sequence_CDR_T.h#119
   0x00489872(=PhysicsDataMng.exe:0x01:088872) sourcescpp
\sim_common_c.cpp#3397

The object array (0x01A0CAD0) [size: 2606 bytes] was created with
new[]
Call Tree:
   0x004492CC(=PhysicsDataMng.exe:0x01:0482CC) D:\Programme\Borland\BDS
\4.0\ACETAO\\include\tao/Unbounded_Value_Allocation_Traits_T.h#40
   0x00441318(=PhysicsDataMng.exe:0x01:040318) D:\Programme\Borland\BDS
\4.0\ACETAO\\include\tao/Unbounded_Octet_Sequence_T.h#247
   0x004350EC(=PhysicsDataMng.exe:0x01:0340EC) D:\Programme\Borland\BDS
\4.0\ACETAO\\include\tao/Unbounded_Octet_Sequence_T.h#57
   0x004898E2(=PhysicsDataMng.exe:0x01:0888E2) D:\Programme\Borland\BDS
\4.0\ACETAO\\include\tao/Unbounded_Sequence_CDR_T.h#111
   0x00489872(=PhysicsDataMng.exe:0x01:088872) sourcescpp
\sim_common_c.cpp#3397
   0x00489AAF(=PhysicsDataMng.exe:0x01:088AAF) sourcescpp
\sim_common_c.cpp#3425


Codeguard avoids the access violation. Without linking the codeguard
library the server program crashes if more than 2604 bytes was
received.

In my large project I firstly build a static library from all IDL
generated cpp files. This library is linked to the server process
without using the option "Use dynamic RTL". If I build all (the
library and the server.exe) with this option no errors occur. If I
directly add the IDL generated CPP files to the server project file
without using the library it works fine too. Also the error from
codeguard tool is lost.

It seems to me a version without using of dynamic RTL is not possible
with usage of BDS2006 ?? Now I had to change all projects and to set
the option "Use dynamic RTL" to be sure the TAO unbounded sequences
are working correctly. Or do you have a different idea?

Thanks for help

Best regards
Arne Berger



More information about the Ace-users mailing list