On 5/30/26 04:51, Pavel Zotov wrote:
> Consider script from attachment .zip and batch ( it must be saved with
> same name as attached .zip, i.e. *pg-temptab.bat* ):
> =============
> @echo off
> setlocal enabledelayedexpansion enableextensions
>
> @rem #################
> set fb_home=C:\FB\60SS
> @rem #################
>
> set joblog=%~dpn0.log
> set tmplog=%~dpn0.tmp
> if exist !joblog! del !joblog!
> set /a iter=0
> :m1
> set /a iter=!iter!+1
> echo .................... iter !iter! ..................
> !fb_home!\isql.exe -q -e -z -i %~dpn0.sql 1>!tmplog! 2>&1
> set elev=!errorlevel!
> type !tmplog! >> !joblog!
> del !tmplog!
>
> if NOT !elev! EQU 0 (
> goto :fin
> )
> goto :m1
>
> :fin
> echo Bye-bye from %~f0
> =============
> (one need to adjust "*fb_home*" variable to your env.)
>
> Run this batch. Its output will be:
> .................... iter 1 ..................
> .................... iter 2 ..................
> .................... iter 3 ..................
> ...
>
> After some count of iterations (on my PC it is about 30...50) either FB
> will hang or crashed.
>
> FB snapshot ( 6.0.0.1976-eead264-x64 ), dumps and stack traces are here
> <
https://drive.google.com/drive/folders/1C7eE5a-
> KJ3GiLCGaKRyTc2NG7Z1u2VpX?usp=sharing>
>
The only problem I can reproduce is this assert:
void Database::markForDelete(RelationPermanent* relation)
{
MutexLockGuard g(dbb_del_pages_mutex, FB_FUNCTION);
#ifdef DEV_BUILD
FB_SIZE_T dummy;
bool rc = dbb_del_pages.findEx(
[relation](const DelPagesMarker& item) -> int
{
return std::greater{}(item.relation, relation);
},
dummy);
fb_assert(!rc);
#endif
dbb_del_pages.add({dbb_next_transaction, relation});
}
Once removed it, no crash happens running the script in a loop.
Adriano