Page 1 of 1
DispouseBuf error
Posted: Tue 18 Aug 2009 08:00
by Belitski
Hello,
we use ODAC 5.80.0.43 under Delphi5.
Database is Oracle9.2.0.1.
ODAC is used with NET Option False.
By all query components the cashed update is used.
The problem:
"DisposeBuf failed (D:\Projects\Delphi\Dac\Source\MemData.pas, line 6820)"
We know, that some problem with DisposeBuf was fixed in the later version of ODAC (6.05.0.7).
What kind of problem was it? Was it a new problem from the version 6 or it was the problem of earlier versions?
Thank you very much,
Vladimir
Posted: Wed 19 Aug 2009 07:18
by Plash
This is the same problem that was fixed in ODAC 6.05.
Posted: Wed 19 Aug 2009 07:49
by Belitski
Was this error already in the version 5.80.0.43?
If Yes, could you give us a code snippet or just a hint
what was wrong and what should be corrected?
We need solution for the problem.
Posted: Mon 31 Aug 2009 12:23
by Belitski
Sorry, but we are still waiting for reply from ODAC Team.
Is there any hope to get a fix for the problem in the 5.80.0.43?
Thank you,
Vladimir
Posted: Wed 02 Sep 2009 08:06
by Plash
If you have ODAC with Sources, please contact us by e-mail support*devart*com. We will send you the code of the corrected procedure from the MemData unit.
the problem not solved
Posted: Thu 24 Sep 2009 10:06
by Belitski
Unfortunately, the problem was not solved after compiling dac50.bpl with changes in the MemData unit.
We log all exceptions in the file using JCL debug. But in this case we are not able to define where the error comes from.
We cannot reproduce the problem in our test environment. However, the customer get this error regularily.
What can we do in such case? We try to analyse your code, but we cannot get so deep inside - it is not so transparent. What should we check, from your point of view, in our application? Wenn this error can happen, what can lead to it? The error comes from the following code in procedure TStringHeap.DisposeBuf(Buf: IntPtr):
if (Buf nil) then begin
PRefCount := IntPtr(Integer(Buf) - SizeOf(Word));
RefCount := Marshal.ReadInt16(PRefCount);
Assert(RefCount >= RefNull, 'DisposeBuf failed');
We work with Oracle 9.2.0.1.0. We use cached updates. Net option is set to false.
Any hint is welcome.
Thank you very much in advance,
Vladimir
Posted: Tue 06 Oct 2009 06:42
by Belitski
Hello,
we still do not have any answer from ODAC team. We have sent this info over contact form also.
Please, give us any hint what we can do in this situation.
Vladimir
Posted: Wed 07 Oct 2009 08:06
by Plash
Try to log all operations that your application performs. This can help to find the sequence of operations that reproduces the problem.