|
From: Volker R. <vol...@bi...> - 2006-02-23 16:23:21
|
Hi, I can reliably reproduce the above server crash through a sequence of DML and DDL statements. There are no udfs involved. I have found an old thread in the archive about 3221225477, but it didn't explain much. Can someone please give me a hint as to what this error code indicates? FB2b2 build 12180 SS NT,W2K,XP regards, Volker |
|
From: Vlad H. <hv...@us...> - 2006-02-23 20:40:27
|
> I can reliably reproduce the above server crash through a sequence of
> DML and DDL statements. There are no udfs involved.
If it possible feel free to send me how to reproduce this crash
> I have found an old
> thread in the archive about 3221225477, but it didn't explain much. Can
> someone please give me a hint as to what this error code indicates?
There are no such error code but 3221225477 == 0xC0000005 which
is a well known win32 exception - access violation.
Hope this help
Regards,
Vlad
|
|
From: Volker R. <vol...@bi...> - 2006-02-24 05:49:27
|
Hi Vlad, Vlad Horsun schrieb: >>I can reliably reproduce the above server crash through a sequence of > > If it possible feel free to send me how to reproduce this crash So far I was not able to isolate a case, sorry. > There are no such error code but 3221225477 == 0xC0000005 which > is a well known win32 exception - access violation. So I succeed in driving FB into an AV, probably by somehow removing/changing or blocking resources it needs? How can I do this by only sending it DDL and DML? The client application runs on a different machine. I have changed the page buffers from 2048 to 4096, and the error is gone for now. Would that give a clue? regards, Volker |
|
From: Vlad H. <hv...@us...> - 2006-02-24 07:27:16
|
> >>I can reliably reproduce the above server crash through a sequence of
> >
> > If it possible feel free to send me how to reproduce this crash
>
> So far I was not able to isolate a case, sorry.
Can you setup .pdb files, activate dr.Watson and produce crash dump ?
It can help to understand where crash is, at least
> > There are no such error code but 3221225477 == 0xC0000005 which
> > is a well known win32 exception - access violation.
>
> So I succeed in driving FB into an AV, probably by somehow
> removing/changing or blocking resources it needs? How can I do this by
> only sending it DDL and DML? The client application runs on a different
> machine.
Perhaps we have some (new) bug
> I have changed the page buffers from 2048 to 4096, and the error is gone
> for now. Would that give a clue?
Not much ;) Usually there are no reason to have page size less than 4096
But crash is not appropriate in any page size so i'd like to fix it anyway
Regards,
Vlad
|
|
From: Volker R. <vol...@bi...> - 2006-02-24 08:27:32
|
Vlad Horsun schrieb: > Can you setup .pdb files, activate dr.Watson and produce crash dump ? > It can help to understand where crash is, at least I'll try. >>I have changed the page buffers from 2048 to 4096, and the error is gone >>for now. Would that give a clue? > > Not much ;) Usually there are no reason to have page size less than 4096 No, the page *size* is the same. I have doubled the number of page *buffers*. regards, Volker |
|
From: Vlad H. <hv...@us...> - 2006-02-24 09:06:57
|
> > Can you setup .pdb files, activate dr.Watson and produce crash dump ?
> > It can help to understand where crash is, at least
>
> I'll try.
Ok
> >>I have changed the page buffers from 2048 to 4096, and the error is gone
> >>for now. Would that give a clue?
> >
> > Not much ;) Usually there are no reason to have page size less than 4096
>
> No, the page *size* is the same. I have doubled the number of page
> *buffers*.
Oh, excuse me. My mistake. But it does not change an affair ;)
Regards,
Vlad
|
|
From: Volker R. <vol...@bi...> - 2006-02-25 03:18:31
|
Hi Vlad, Vlad Horsun schrieb: >>> Can you setup .pdb files, activate dr.Watson and produce crash dump ? >>>It can help to understand where crash is, at least >> >>I'll try. > > Ok I'm using the debug build now (~.zip), but it behaves exactly as the regular build: entry about abnormal termination in firebird.log, but no drwatson. There are recent drwatson-logs re other applications, so I know it is active and setup correctly. Although it says it is enabled by default with a debug build, I have set the BugCheckAbort param in firebid.conf to 1, just to be sure. What am I missing? regards, Volker |
|
From: Vlad H. <hv...@us...> - 2006-02-27 22:19:06
|
Hi Volker,
Sorry for delay with answer
> I'm using the debug build now (~.zip), but it behaves exactly as the
> regular build: entry about abnormal termination in firebird.log, but no
This is not a debug build. This is a regular release build with .pdb
files included in .zip
> drwatson. There are recent drwatson-logs re other applications, so I
> know it is active and setup correctly.
>
> Although it says it is enabled by default with a debug build, I have set
> the BugCheckAbort param in firebid.conf to 1, just to be sure. What am I
> missing?
It seems you did all right. Just to be sure check the following please :
1. You have .pdb files in the same dir with .exe files (fbserver.exe and fbserver.pdb)
2. You have set BugCheckAbort = 1and removed # at the start of line
(i'm sure you already did that but i must to say that ;)
3. You have restarted server after firebird.conf change
4. You have enabled and activated drWatson - look into the registry
key : HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
value : Auto = 1
value : Debugger = drwtsn32 -p %ld -e %ld -g
You can activate it by running drwtsn32 -i
Regards,
Vlad
|
|
From: Volker R. <vol...@bi...> - 2006-02-28 04:44:35
|
Hi Vlad, Vlad Horsun schrieb: > 1. You have .pdb files in the same dir with .exe files (fbserver.exe and fbserver.pdb) > > 2. You have set BugCheckAbort = 1and removed # at the start of line > (i'm sure you already did that but i must to say that ;) > > 3. You have restarted server after firebird.conf change > > 4. You have enabled and activated drWatson - look into the registry > > key : HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug > value : Auto = 1 > value : Debugger = drwtsn32 -p %ld -e %ld -g Yes to all of it, still drwatson doesn't get started. Btw, this is a typical sequence: ------------------------------------------------- ZAPPA (Client) Tue Feb 28 13:22:13 2006 INET/inet_error: read errno = 10054 ZAPPA (Client) Tue Feb 28 13:22:13 2006 INET/inet_error: send errno = 10054 ZAPPA (Client) Tue Feb 28 13:22:13 2006 INET/inet_error: send errno = 10054 ZAPPA (Client) Tue Feb 28 13:22:13 2006 INET/inet_error: send errno = 10054 ZAPPA (Client) Tue Feb 28 13:22:13 2006 INET/inet_error: send errno = 10054 ZAPPA (Client) Tue Feb 28 13:22:13 2006 REMOTE INTERFACE/gds__detach: Unsuccesful detach from database. Uncommitted work may have been lost ZAPPA (Client) Tue Feb 28 13:22:13 2006 INET/inet_error: send errno = 10054 ZAPPA (Client) Tue Feb 28 13:22:13 2006 D:\Programme\Firebird20\bin\fbserver.exe: terminated abnormally (3221225477) ZAPPA (Client) Tue Feb 28 13:22:13 2006 Guardian starting: D:\Programme\Firebird20\bin\fbserver.exe -------------------------------------------------------------------- it doesn't always crash the server. sometimes sequences like this one can be found, they can be produced within a minute or few minutes: ZAPPA (Client) Tue Feb 28 13:22:13 2006 INET/inet_error: send errno = 10054 ZAPPA (Client) Tue Feb 28 13:22:13 2006 REMOTE INTERFACE/gds__detach: Unsuccesful detach from database. Uncommitted work may have been lost ZAPPA (Client) Tue Feb 28 13:22:13 2006 INET/inet_error: send errno = 10054 ---------------------------------------------------------------------- it does not always need 5 10054 errors to crash, but that's the most common pattern. Client application and fb server are on the same machine in this example, so I guess the 10054 can hardly be a NIC issue, although I use the remote protocol to connect, plus it appears only with certain query scenarios. With the majority of them, fb runs rock solid. And: As soon as I change the number of page buffers from 2048 to 4096, there is no 10054 in firebird.log *at all*, no matter how long I try to produce any errors. I'm wondering what causes FB to forcibly close a socket if it is not a network problem. regards, Volker |
|
From: Claudio V. C. <cv...@us...> - 2006-02-28 06:03:23
|
> -----Original Message----- > From: fir...@li... > [mailto:fir...@li...]On Behalf Of Volker > Rehn > > I'm wondering what causes FB to forcibly close a socket if it is not a > network problem. In the worst case, it may be memory corruption. Can you try to reproduce the problem by running the program and the server in the same machine, starting the server as an application? I don't know if this is possible with your application (I don't remember having read that you do connections through a web server, so it may possible). C. |
|
From: Vlad H. <hv...@us...> - 2006-02-28 07:08:02
|
> Yes to all of it, still drwatson doesn't get started.
> Btw, this is a typical sequence:
>
...
> ZAPPA (Client) Tue Feb 28 13:22:13 2006
> Guardian starting: D:\Programme\Firebird20\bin\fbserver.exe
Please - don't use guardian ! I'm guess it is act as a debugger (as it
launches fbserver) and hence another debugger (drWatson) can't attach
when crash occurred.
Regards,
Vlad
|
|
From: Alex P. <pe...@in...> - 2006-02-28 07:27:25
|
Hi! I'll try to help you understnad this log. Please pay attention that all messages are marked as (Client), i.e. they were added by fbclient, not fbserver. Volker Rehn wrote: > ZAPPA (Client) Tue Feb 28 13:22:13 2006 > INET/inet_error: send errno = 10054 > > client noticed failure at server side of socket > ZAPPA (Client) Tue Feb 28 13:22:13 2006 > REMOTE INTERFACE/gds__detach: Unsuccesful detach from database. > Uncommitted work may have been lost > it informs you that it failed to detach > > ZAPPA (Client) Tue Feb 28 13:22:13 2006 > INET/inet_error: send errno = 10054 > another client noticed problems - total number of such messages is equal to the number of active connections > > ZAPPA (Client) Tue Feb 28 13:22:13 2006 > D:\Programme\Firebird20\bin\fbserver.exe: terminated abnormally > (3221225477) > > Guardian notifies you, that server died. Side note. Server runs under guardian control and this is a reason for drWatson not to start. Start it without guardian (as an application with 'fbserver -a', for example) to let Watson do it's work. > > ZAPPA (Client) Tue Feb 28 13:22:13 2006 > Guardian starting: D:\Programme\Firebird20\bin\fbserver.exe > Server was restarted by fbguard. > -------------------------------------------------------------------- > it doesn't always crash the server. sometimes sequences like this one > can be found, they can be produced within a minute or few minutes: > > ZAPPA (Client) Tue Feb 28 13:22:13 2006 > INET/inet_error: send errno = 10054 > > > ZAPPA (Client) Tue Feb 28 13:22:13 2006 > REMOTE INTERFACE/gds__detach: Unsuccesful detach from database. > Uncommitted work may have been lost > > > ZAPPA (Client) Tue Feb 28 13:22:13 2006 > INET/inet_error: send errno = 10054 > This messages are not the reason of a server crash. Server crash is a reason that they arrive in the log - it's just a trace of the fact, that a number of clients detected server death. They arrive in more or less random order, therefore it seems that first of them crashed the server, but the rest - did not. In fact random order of records in firebird.log about events, that took place simultaneously, hides a real reason. Therefore don't worry about client messages, but make drWatson run. Alex. |
|
From: Volker R. <vol...@bi...> - 2006-02-28 13:41:05
|
Hi all, Alex Peshkov schrieb: > Therefore don't worry about client messages, but make drWatson run. Yes, leaving the guardian aside did the trick. What do you need now? user.dmp or drwatson.log which contains more stuff which is not related to this issue? Both are fairly small 36K and 338K. Where should I send it to? To answer a few questions: - The server runs as an application - I test with client and server on a single machine. - Tests with client and server on different machines (both different from the one I use for single-machine testing) show the same behaviour, so bad memory is unlikely - I have tried to reproduce the error using a script, no luck so far Thank you all for your help. regards, Volker |
|
From: Alex P. <pe...@in...> - 2006-02-28 13:49:28
|
Hi, Volker! Volker Rehn wrote: > Hi all, > > Alex Peshkov schrieb: > >> Therefore don't worry about client messages, but make drWatson run. > > > Yes, leaving the guardian aside did the trick. What do you need now? > user.dmp or drwatson.log which contains more stuff which is not related > to this issue? Both are fairly small 36K and 338K. Where should I send > it to? > I'm sorry, not to me. Could it be linux's core - I'll be able to look at it. May be Claudio or Vlad can help? |
|
From: Volker R. <vol...@bi...> - 2006-02-28 14:10:51
|
Hi Alex, Alex Peshkov schrieb: > I'm sorry, not to me. Could it be linux's core - I'll be able to look at > it. May be Claudio or Vlad can help? It doesn't occur with linux ;-) regards, Volker |
|
From: Vlad H. <hv...@us...> - 2006-02-28 14:16:38
|
> Yes, leaving the guardian aside did the trick. What do you need now?
> user.dmp or drwatson.log which contains more stuff which is not related
> to this issue? Both are fairly small 36K and 338K. Where should I send
> it to?
Send me drwatson.log, please. If you zip it - change .zip extension or
SF will not passed this mail.
Regards,
Vlad
|
|
From: Vlad H. <hv...@us...> - 2006-02-28 16:11:06
|
> Send me drwatson.log, please. If you zip it - change .zip extension or
> SF will not passed this mail.
I've received it, thanks. What i can see :
AV occurs in evl_string.h, line 98
template <typename CharType>
static void preKmp(const CharType *x, int m, SLONG kmpNext[])
{
SLONG i = 0;
SLONG j = kmpNext[0] = -1;
while (i < m) {
while (j > -1 && x[i] != x[j])
j = kmpNext[j];
i++;
j++;
if (x[i] == x[j]) // AV here
kmpNext[i] = kmpNext[j];
else
kmpNext[i] = j;
}
}
Some variables at AV time : m == 0x80, i == 0x80, j == 0x00
Since i must be in range 0..0x7F (0..m-1) we have an AV when x[i] evaluated
As i understand this is a part of CONTAINING evaluation. The algorithm
was written by Nickolay and i unfortunately have no knowledge of how it must
work. May be Adriano can say more ?
Regards,
Vlad
PS Test case will be much appreciated
|
|
From: Adriano d. S. F. <adr...@uo...> - 2006-02-28 17:35:57
|
Vlad Horsun wrote:
>> Send me drwatson.log, please. If you zip it - change .zip extension or
>> SF will not passed this mail.
>>
>
> I've received it, thanks. What i can see :
>
> AV occurs in evl_string.h, line 98
>
> template <typename CharType>
> static void preKmp(const CharType *x, int m, SLONG kmpNext[])
> {
> SLONG i = 0;
> SLONG j = kmpNext[0] = -1;
> while (i < m) {
> while (j > -1 && x[i] != x[j])
> j = kmpNext[j];
> i++;
> j++;
> if (x[i] == x[j]) // AV here
> kmpNext[i] = kmpNext[j];
> else
> kmpNext[i] = j;
> }
> }
>
> Some variables at AV time : m == 0x80, i == 0x80, j == 0x00
> Since i must be in range 0..0x7F (0..m-1) we have an AV when x[i] evaluated
>
>
> As i understand this is a part of CONTAINING evaluation. The algorithm
> was written by Nickolay and i unfortunately have no knowledge of how it must
> work. May be Adriano can say more ?
>
I don't have knowledge of Knuth-Morris-Pratt algorithm, but I can say
that preKmp is always accessing a invalid location.
The AV will occur with a "magic" string length, causing the invalid
location is in another memory page.
As it's probably that compare of garbage with part of the string is
false, I propose to change the line to "if (i < m && x[i] == x[j])".
Comments?
Adriano
|
|
From: Vlad H. <hv...@us...> - 2006-02-28 20:57:49
|
> > template <typename CharType>
> > static void preKmp(const CharType *x, int m, SLONG kmpNext[])
> > {
> > SLONG i = 0;
> > SLONG j = kmpNext[0] = -1;
> > while (i < m) {
> > while (j > -1 && x[i] != x[j])
> > j = kmpNext[j];
> > i++;
> > j++;
> > if (x[i] == x[j]) // AV here
> > kmpNext[i] = kmpNext[j];
> > else
> > kmpNext[i] = j;
> > }
> > }
> >
> > Some variables at AV time : m == 0x80, i == 0x80, j == 0x00
> > Since i must be in range 0..0x7F (0..m-1) we have an AV when x[i] evaluated
> >
> >
> > As i understand this is a part of CONTAINING evaluation. The algorithm
> > was written by Nickolay and i unfortunately have no knowledge of how it must
> > work. May be Adriano can say more ?
> >
> I don't have knowledge of Knuth-Morris-Pratt algorithm, but I can say
> that preKmp is always accessing a invalid location.
> The AV will occur with a "magic" string length, causing the invalid
> location is in another memory page.
>
> As it's probably that compare of garbage with part of the string is
> false, I propose to change the line to "if (i < m && x[i] == x[j])".
In that case we'll have invalid i (i == m) in kmpNext[i] = j expression.
It seems that we must change while (i < m) to while (i < m-1)
Am i right ?
Regards,
Vlad
|
|
From: Adriano d. S. F. <adr...@uo...> - 2006-02-28 22:00:25
|
Vlad Horsun wrote:
>>> template <typename CharType>
>>> static void preKmp(const CharType *x, int m, SLONG kmpNext[])
>>> {
>>> SLONG i = 0;
>>> SLONG j = kmpNext[0] = -1;
>>> while (i < m) {
>>> while (j > -1 && x[i] != x[j])
>>> j = kmpNext[j];
>>> i++;
>>> j++;
>>> if (x[i] == x[j]) // AV here
>>> kmpNext[i] = kmpNext[j];
>>> else
>>> kmpNext[i] = j;
>>> }
>>> }
>>>
>>> Some variables at AV time : m == 0x80, i == 0x80, j == 0x00
>>> Since i must be in range 0..0x7F (0..m-1) we have an AV when x[i] evaluated
>>>
>>>
>>> As i understand this is a part of CONTAINING evaluation. The algorithm
>>> was written by Nickolay and i unfortunately have no knowledge of how it must
>>> work. May be Adriano can say more ?
>>>
>>>
>> I don't have knowledge of Knuth-Morris-Pratt algorithm, but I can say
>> that preKmp is always accessing a invalid location.
>> The AV will occur with a "magic" string length, causing the invalid
>> location is in another memory page.
>>
>> As it's probably that compare of garbage with part of the string is
>> false, I propose to change the line to "if (i < m && x[i] == x[j])".
>>
>
> In that case we'll have invalid i (i == m) in kmpNext[i] = j expression.
No, because kmpNext has size = m + 1:
kmpNext = reinterpret_cast<SLONG*>(alloc((_pattern_len + 1) *
sizeof(SLONG)));
> It seems that we must change while (i < m) to while (i < m-1)
BTW, I have search for Knuth-Morris-Pratt and found that "official"
algorithm is the one we have now.
This guy have the same problem of us:
http://www.programmersheaven.com/c/MsgBoard/read.asp?Board=3&MsgID=258799&Setting=A9999F0001
And I found a Java version that do what you say (i < m - 1):
http://www.koders.com/java/fid60C727551976C066420000B5CDF85F93A31A00BB.aspx?s=%22Knuth-Morris-Pratt%22.
But I'm not sure the search part of the algorithm is the same of our.
First option seems more safe for me.
Adriano
|
|
From: Volker R. <vol...@bi...> - 2006-03-01 04:31:05
|
Hi Adriano and Vlad, Adriano dos Santos Fernandes schrieb: > Vlad Horsun wrote: >>> As it's probably that compare of garbage with part of the string is >>> false, I propose to change the line to "if (i < m && x[i] == x[j])". >>> >> In that case we'll have invalid i (i == m) in kmpNext[i] = j >> expression. > > No, because kmpNext has size = m + 1: > kmpNext = reinterpret_cast<SLONG*>(alloc((_pattern_len + 1) * > sizeof(SLONG))); and it needs that size, because it is used in the main part of the algorithm. here is another KMP reference http://www-igm.univ-mlv.fr/~lecroq/string/node8.html just to avoid confusion, on some pages, they present the Morris-Pratt algorithm as KMP. The main difference is that MP does not do the comparison which causes us trouble, that's the spot where KMP is optimized compared to MP. Instead of (KMP) ... i++; j++; if (x[i] == x[j]) // AV here kmpNext[i] = kmpNext[j]; else kmpNext[i] = j; ... it just goes (MP) ... i++; j++; kmpNext[i] = j; ... >> It seems that we must change while (i < m) to while (i < m-1) No, because kmpNext[m] must be set for the main part. When a match was found there, j is set to kmpNext[j]. At that stage, j == m. The question is, what needs to go into kmpNext[m]? If we change it to if (i < m && x[i] == x[j]) then kmpNext[m] will always be j in the preprocessing part. Funny that out there on the web there is no reference about the built-in flaw of accessing the pattern array at an invalid location. At least I haven't found any. That's the C tradition, I guess. I wonder if through more clever indexing one could avoid the additional comparison, because the range check has actually been done before in the while loop. regards, Volker |
|
From: eg <eg...@ju...> - 2006-02-28 22:02:14
|
Adriano dos Santos Fernandes wrote:
> Vlad Horsun wrote:
>>> Send me drwatson.log, please. If you zip it - change .zip
>>> extension or SF will not passed this mail.
>>
>> I've received it, thanks. What i can see :
>>
>> AV occurs in evl_string.h, line 98
>>
>> template <typename CharType>
>> static void preKmp(const CharType *x, int m, SLONG kmpNext[]) {
>> SLONG i = 0;
>> SLONG j = kmpNext[0] = -1;
>> while (i < m) {
>> while (j > -1 && x[i] != x[j])
>> j = kmpNext[j];
>> i++;
>> j++;
>> if (x[i] == x[j]) // AV here
>> kmpNext[i] = kmpNext[j];
>> else
>> kmpNext[i] = j;
>> }
>> }
>>
>> Some variables at AV time : m == 0x80, i == 0x80, j == 0x00
>> Since i must be in range 0..0x7F (0..m-1) we have an AV when x[i]
>> evaluated
>>
>>
>> As i understand this is a part of CONTAINING evaluation. The
>> algorithm was written by Nickolay and i unfortunately have no
>> knowledge of how it must work. May be Adriano can say more ?
>>
> I don't have knowledge of Knuth-Morris-Pratt algorithm, but I can say
> that preKmp is always accessing a invalid location.
> The AV will occur with a "magic" string length, causing the invalid
> location is in another memory page.
>
> As it's probably that compare of garbage with part of the string is
> false, I propose to change the line to "if (i < m && x[i] == x[j])".
>
> Comments?
>
... this looks mighty familiar:
http://www-igm.univ-mlv.fr/~lecroq/string/node8.html
|
|
From: Umberto M. <ma...@un...> - 2006-02-23 19:03:22
|
Volker Rehn ha scritto: > Hi, > > I can reliably reproduce the above server crash through a sequence of > DML and DDL statements. There are no udfs involved. I have found an > old thread in the archive about 3221225477, but it didn't explain > much. Can someone please give me a hint as to what this error code > indicates? > > FB2b2 build 12180 SS NT,W2K,XP > > regards, Volker > If you convert that number in hexadecimal, it is error number C0000005, that is a whole class of windows errors. Maybe is a bad pointer in code: so only debugging can help to find why and where. Anyway, AIRC mixing DML and DDL without commiting is not a good programming choice in Firebird. I think people can't help you, if you don't post your code. Ciao. Umberto Masotti. |
|
From: Alex P. <pe...@in...> - 2006-02-28 09:13:43
|
>> I can reliably reproduce the above server crash through a sequence of >> DML and DDL statements. There are no udfs involved. I have found an >> old thread in the archive about 3221225477, but it didn't explain >> much. Can someone please give me a hint as to what this error code >> indicates? >> Can you create an entry in field-test bugs' list, accompanied with a script to reproduce an error? This will be the best way to solve this problem. Alex. |
|
From: Volker R. <vol...@bi...> - 2006-02-28 14:06:45
|
Hi Umberto Umberto Masotti schrieb: > Volker Rehn ha scritto: >> I can reliably reproduce the above server crash through a sequence of >> DML and DDL statements. There are no udfs involved. I have found an >> old thread in the archive about 3221225477, but it didn't explain >> much. Can someone please give me a hint as to what this error code >> indicates? >> >> FB2b2 build 12180 SS NT,W2K,XP >> > If you convert that number in hexadecimal, it is error number C0000005, > that is a whole class of windows errors. > Maybe is a bad pointer in code: so only debugging can help to find why > and where. I cannot debug the server. It is not my application that's crashing. It is my application crashing the server. > Anyway, AIRC mixing DML and DDL without commiting is not a good > programming choice in Firebird. I did not say I'm not committing DDL and DML. > I think people can't help you, if you don't post your code. There's no problem, I've been posting whole test databases in the past. I'd be glad if I had something to post, but so far I had no success trying to reproduce the error using a script. regards, Volker |