Forum Discussion
7 Replies
Sort By
- her123New ContributorThere seems to be two cases:
If the RootNodeCount = 1 then an AV occurs.
When VirtualStringTree.Clear() is called and AV occurs. - her123New ContributorI have narrowed it down to the EndUpdate()
- her123New ContributorTBaseVirtualTree.PackArray() where it executes assembler on Win32 is the problem
asm
PUSH EBX
PUSH EDI
PUSH ESI
MOV ESI, EDX
MOV EDX, -1
JCXZ @@Finish // Empty list?
INC EDX // init remaining entries counter
MOV EDI, ESI // source and destination point to the list memory
MOV EBX, 1 // use a register instead of immediate operant to check against
@@PreScan:
TEST [ESI], EBX // do the fastest scan possible to find the first entry
// which must be removed
JNZ @@DoMainLoop
INC EDX
ADD ESI, 4
DEC ECX
JNZ @@PreScan
JMP @@Finish
@@DoMainLoop:
MOV EDI, ESI
@@MainLoop:
TEST [ESI], EBX // odd entry?
JNE @@Skip // yes, so skip this one
MOVSD // else move the entry to new location
INC EDX // count the moved entries
DEC ECX
JNZ @@MainLoop // do it until all entries are processed
JMP @@Finish
@@Skip:
ADD ESI, 4 // point to the next entry
DEC ECX
JNZ @@MainLoop // do it until all entries are processed
@@Finish:
MOV EAX, EDX // prepare return value
POP ESI
POP EDI
POP EBX
end;
AQTime has problems with this.
The solution is to modify the conditional define and use the Pascal code that would normally be used for the 64bit build. - Eric_ZurcherVisitorA bit more testing shows that the problem seems to be the result of using the JCXZ instruction. If the VirtualTree code is changed from
JCXZ @@Finish
to the equivalent:
CMP CX, 0
JZ @@Finish
then AQTime can execute it. Why should this be so? - AlexKarasChampion Level 3Hi Neville and Eric,
While Support monitors this and other forums on the site, I think that it may speed things up if you submit a ticket via http://support.smartbear.com/message/?prod=AQtime referencing this thread... - aqAntSmartBear Alumni (Retired)
Hi All,
We have analyzed the situation with the JCXZ instruction and found out that there is a problem with AQtime's patcher when it patches the VirtualTrees::TBaseVirtualTree::PackArray method. Unfortunately, we were unable to determine the exact cause of the problem. Normally, AQtime should instrument the code with the instruction just fine. We will continue working on the problem.
Anyway, to avoid the crash, you should exclude the VirtualTrees::TBaseVirtualTree::PackArray routine from the profiling. - AlexKarasChampion Level 3Thank you for the confirmation, Jay.
Related Content
- 3 years ago
- 4 years ago
- 7 years ago
Recent Discussions
- 4 months ago
- 2 years ago