Subject Firebird 2.0.1.12855 deadlock, call stacks included
Author Antti Nivala
Hi!

We encountered a deadlock on one of our production systems. It looks
like a deadlock in Firebird 2.0.1.12855. If at all possible, could
someone with a higher understanding of the internals of Firebird take a
look at the following call stacks. Do they reveal something about the
deadlock? Does it look like a bug in Firebird 2.0.1.12855, or is it
possible to mis-use Firebird APIs in a way that would lead to this kind
of deadlock?

In case someone wants to take a deeper look, I have a userdump of the
deadlock (107 MB). It, together with the relevant binaries and PDBs,
gives fairly good possibilities for post-mortem analysis.

The call stacks below can be also be downloaded as a TXT file for easier
reading:
http://download.motivesys.com/FB201_Deadlock_CallStacks.txt

NOTE: The following call stacks refer to "gds32.dll" instead of
"fbembed.dll"
because the file has been renamed for compatibility reasons. The
"gds32.dll"
file in this case is actually "fbembed.dll", version 2.0.1.12855.


Thread 2100:

ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc
kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48
kernel32.dll!_WaitForMultipleObjects@16() + 0x18
gds32.dll!ISC_event_wait(short count=1, event_t * * events=0x0172fab0,
long * values=0x0172fab8, long micro_seconds=0, void (void *)*
timeout_handler=0x00000000, void * handler_arg=0x00000000) Line 1291
C++
gds32.dll!stall(thread * thread=0x00000001) Line 963 C++
gds32.dll!SCH_enter() Line 444 C++
gds32.dll!isc_detach_database(long * user_status=0x0172fb50, void * *
handle=0x020af8d0) Line 1730 C++
IBProv.dll!45e3eac6()
IBProv.dll!45e21729()
ntdll.dll!_RtlFreeHeap@12() + 0x130
oledb32.dll!CAcm::FinalRelease() + 0x3c
oledb32.dll!CACMDynamic<CCMProviderWrapper>::CmFinalRelease() + 0x4c
oledb32.dll!CDCM::FinalRelease() + 0x1b
oledb32.dll!ATL::CComPolyObject<CDCM>::~CComPolyObject<CDCM>() + 0x2a
oledb32.dll!ATL::CComPolyObject<CDCM>::Release() + 0x162aa
oledb32.dll!CDCMPool::DestroyResource() + 0x52
comsvcs.dll!CHolder::SafeDispenserDriver::DestroyResource() + 0x20
comsvcs.dll!CHolder::ProcessDestroyList() + 0x2e
comsvcs.dll!CHolder::DestroyResources() + 0xe2
comsvcs.dll!CHolder::Ping() + 0x1d
comsvcs.dll!PingThread() + 0xcb
kernel32.dll!_BaseThreadStart@8() + 0x37


Thread 2676:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc
kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48
kernel32.dll!_WaitForMultipleObjects@16() + 0x18
gds32.dll!ISC_event_wait(short count=1, event_t * * events=0x0649fa24,
long * values=0x0649fa2c, long micro_seconds=0, void (void *)*
timeout_handler=0x00000000, void * handler_arg=0x00000000) Line 1291
C++
gds32.dll!stall(thread * thread=0x00000001) Line 963 C++
gds32.dll!SCH_enter() Line 444 C++
gds32.dll!isc_database_info(long * user_status=0x0649fac8, void * *
handle=0x0c5955c8, short item_length=1, const char * items=0x0649fac3,
short buffer_length=20, char * buffer=0x0649fb18) Line 1594 C++
IBProv.dll!45e3ec30()
advapi32.dll!_BaseSetLastNTError@4() + 0x18
ntdll.dll!_NtOpenProcessToken@12() + 0xc
ntdll.dll!_NtCompareTokens@12() + 0xc
ntdll.dll!_ZwClose@4() + 0xc
oledb32.dll!CDCMPool::IsTheSameToken() + 0x54


Thread 2680:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc
kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48
kernel32.dll!_WaitForMultipleObjects@16() + 0x18
gds32.dll!ISC_event_wait(short count=1, event_t * * events=0x0669e284,
long * values=0x0669e28c, long micro_seconds=0, void (void *)*
timeout_handler=0x00000000, void * handler_arg=0x00000000) Line 1291
C++
gds32.dll!stall(thread * thread=0x00000001) Line 963 C++
gds32.dll!SCH_enter() Line 444 C++
gds32.dll!isc_attach_database(long * user_status=0x0669e73c, short
file_length=0, const char * file_name=0x0c550608, void * *
public_handle=0x02914570, short dpb_length=56, const char *
dpb=0x0669e7f8) Line 766 C++
IBProv.dll!45e3e545()
gds32.dll!Firebird::MemoryPool::deallocate(void * block=0x0669e790)
Line 1741 + 0x7 C++
gds32.dll!Firebird::MemoryPool::addFreeBlock(Firebird::MemoryBlock *
blk=) Line 1456 C++


Thread 2684:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForSingleObject@12() + 0xc
kernel32.dll!_WaitForSingleObjectEx@12() + 0x8b
kernel32.dll!_WaitForSingleObject@8() + 0x12
IBProv.dll!45e3e4c2()
gds32.dll!CharSetContainer::lookupCollation(Jrd::thread_db *
tdbb=0x020726f8, unsigned short tt_id=127) Line 760 + 0x1b C++
gds32.dll!INTL_compare(Jrd::thread_db * tdbb=0x06aaeb7c, const dsc *
pText1=0x026041ac, const dsc * pText2=0x02463008, void (long, <no
type>)* err=0x74064216) Line 891 + 0x12 C++
IBProv.dll!45e16155()


Thread 2688:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForSingleObject@12() + 0xc
kernel32.dll!_WaitForSingleObjectEx@12() + 0x8b
kernel32.dll!_WaitForSingleObject@8() + 0x12
IBProv.dll!45e3e4c2()
gds32.dll!Firebird::MemoryPool::internal_deallocate(void *
block=0x0001000c) Line 1597 + 0x8 C++
gds32.dll!Firebird::MemoryPool::deallocate(void * block=0x0000005b)
Line 1741 + 0x7 C++
gds32.dll!Firebird::BePlusTree<Firebird::BlockInfo,unsigned
int,Firebird::MemoryPool::InternalAllocator,Firebird::BlockInfo,Firebird
::DefaultComparator<unsigned
int>,50,750>::Accessor::locate(Firebird::LocType lt=33198140, const
unsigned int & key=) Line 393 C++
gds32.dll!Firebird::MemoryPool::internal_deallocate(void *
block=0x01fa9048) Line 1597 + 0x8 C++
gds32.dll!operator delete(void * mem=0x01139666) Line 1815 C++
gds32.dll!OPT_compile(Jrd::thread_db * tdbb=0x0125a6b4,
Jrd::CompilerScratch * csb=0x00000000, Jrd::RecordSelExpr *
rse=0x00dbef14, Firebird::Stack<Jrd::jrd_nod *,16> *
parent_stack=0x01c10014) Line 939 + 0xdf C++
gds32.dll!sch_mutex_unlock(Firebird::Mutex * mtx=) Line 1071 C++


Thread 2692:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForSingleObject@12() + 0xc
kernel32.dll!_WaitForSingleObjectEx@12() + 0x8b
kernel32.dll!_WaitForSingleObject@8() + 0x12
IBProv.dll!45e3e4c2()
gds32.dll!pass1(Jrd::thread_db * tdbb=0x06eaf22c, Jrd::CompilerScratch *
csb=0x01adc62c, Jrd::jrd_nod * node=0x01a2a8d8, Jrd::jrd_rel *
view=0x00000000, unsigned short view_stream=0, bool validate_expr=false)
Line 3614 + 0x1c C++
gds32.dll!pass1(Jrd::thread_db * tdbb=0x06eaf22c, Jrd::CompilerScratch *
csb=0x01adc62c, Jrd::jrd_nod * node=0x01a2f31c, Jrd::jrd_rel *
view=0x00000000, unsigned short view_stream=0, bool validate_expr=false)
Line 3578 + 0x22 C++
gds32.dll!pass1(Jrd::thread_db * tdbb=0x06eaf22c, Jrd::CompilerScratch *
csb=0x01adc62c, Jrd::jrd_nod * node=0x01a22050, Jrd::jrd_rel *
view=0x00000000, unsigned short view_stream=0, bool validate_expr=false)
Line 3578 + 0x22 C++
gds32.dll!pass1(Jrd::thread_db * tdbb=0x06eaf22c, Jrd::CompilerScratch *
csb=0x01adc62c, Jrd::jrd_nod * node=0x01a13920, Jrd::jrd_rel *
view=0x00000000, unsigned short view_stream=0, bool validate_expr=false)
Line 3578 + 0x22 C++
gds32.dll!pass1(Jrd::thread_db * tdbb=0x017c0060, Jrd::CompilerScratch *
csb=0x01a20664, Jrd::jrd_nod * node=0x019e104c, Jrd::jrd_rel *
view=0x06eaefa8, unsigned short view_stream=0, bool validate_expr=true)
Line 3578 + 0x22 C++
gds32.dll!Firebird::MemoryPool::allocate_nothrow(unsigned int size=36,
short type=14) Line 596 + 0x12 C++
gds32.dll!Firebird::MemoryPool::allocate(unsigned int size=36, short
type=14) Line 735 + 0x10 C++
gds32.dll!PAR_make_node(Jrd::thread_db * tdbb=0x0197de90, int
size=17749504) Line 539 + 0x19 C++
gds32.dll!parse(Jrd::thread_db * tdbb=0x018e4bc0, Jrd::CompilerScratch *
csb=0x017c0024, unsigned short expected=1, unsigned short
expected_optional=0) Line 2407 C++
gds32.dll!parse(Jrd::thread_db * tdbb=0x0174ca2c, Jrd::CompilerScratch *
csb=0x06eaf168, unsigned short expected=22472, unsigned short
expected_optional=31) Line 2943 + 0x18 C++
gds32.dll!Firebird::BePlusTree<Firebird::BlockInfo,unsigned
int,Firebird::MemoryPool::InternalAllocator,Firebird::BlockInfo,Firebird
::DefaultComparator<unsigned int>,50,750>::add(const Firebird::BlockInfo
& item={...}) Line 527 + 0x1b C++
gds32.dll!Firebird::MemoryPool::internal_deallocate(void *
block=0x00000016) Line 1597 + 0x8 C++
gds32.dll!Firebird::MemoryPool::setContextPool(Firebird::MemoryPool *
newPool=0x01780014) Line 230 + 0x12 C++
gds32.dll!VIO_verb_cleanup(Jrd::thread_db * tdbb=0x7c9106ab,
Jrd::jrd_tra * transaction=0x7c9106eb) Line 3065 + 0x19 C++
ntdll.dll!_RtlpAllocateFromHeapLookaside@4() + 0x31


Thread 2696:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc
kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48
kernel32.dll!_WaitForMultipleObjects@16() + 0x18
gds32.dll!ISC_event_wait(short count=1, event_t * * events=0x070af830,
long * values=0x070af838, long micro_seconds=0, void (void *)*
timeout_handler=0x00000000, void * handler_arg=0x00000000) Line 1291
C++
gds32.dll!stall(thread * thread=0x00000001) Line 963 C++
gds32.dll!SCH_enter() Line 444 C++
gds32.dll!isc_database_info(long * user_status=0x070af8d4, void * *
handle=0x0c59b9b0, short item_length=1, const char * items=0x070af8cf,
short buffer_length=20, char * buffer=0x070af924) Line 1594 C++
IBProv.dll!45e3ec30()
advapi32.dll!_BaseSetLastNTError@4() + 0x18
ntdll.dll!_NtOpenProcessToken@12() + 0xc
ntdll.dll!_NtCompareTokens@12() + 0xc
ntdll.dll!_ZwClose@4() + 0xc
oledb32.dll!CDCMPool::IsTheSameToken() + 0x54


Thread 2700:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForSingleObject@12() + 0xc
kernel32.dll!_WaitForSingleObjectEx@12() + 0x8b
kernel32.dll!_WaitForSingleObject@8() + 0x12
IBProv.dll!45e3e4c2()
gds32.dll!operator delete(void * mem=0x01ae5490) Line 1815 C++
gds32.dll!Firebird::MemoryPool::internal_deallocate(void *
block=0x017c0060) Line 1597 + 0x8 C++
gds32.dll!Firebird::MemoryPool::deallocate(void * block=0x072ae7e0)
Line 1741 + 0x7 C++
gds32.dll!Firebird::MemoryPool::addFreeBlock(Firebird::MemoryBlock *
blk=) Line 1456 C++


Thread 2708:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc
kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48
kernel32.dll!_WaitForMultipleObjects@16() + 0x18
gds32.dll!ISC_event_wait(short count=1, event_t * * events=0x0773f39c,
long * values=0x0773f3a4, long micro_seconds=0, void (void *)*
timeout_handler=0x00000000, void * handler_arg=0x00000000) Line 1291
C++
gds32.dll!stall(thread * thread=0x00000001) Line 963 C++
gds32.dll!SCH_enter() Line 444 C++
gds32.dll!isc_attach_database(long * user_status=0x0773f8c4, short
file_length=0, const char * file_name=0x0773f7b4, void * *
public_handle=0x0773f968, short dpb_length=20, const char *
dpb=0x00d89eb8) Line 766 C++
MFServer.exe!FirebirdServices::ReadDatabasePageSize(const
ATL::CStringT<unsigned short,StrTraitMFC<unsigned
short,ATL::ChTraitsCRT<unsigned short> > > & szDatabase={...}, unsigned
long & ulPageSize=0) Line 520 + 0x6d C++
MFServer.exe!CMFVault::SetDBPerformanceParameters(const _GUID &
guidForSettings={...}) Line 7712 + 0x2d C++
MFServer.exe!CMFVault::BringOnline(bool bStartOnlineOperations=true,
const _GUID & guidForSettings={...}) Line 3881 + 0x1f C++
MFServer.exe!CMFVault::GarbageCollectOffline(long lTaskID=5, bool
bDisconnectUsers=true, bool bStartOnlineOperations=true) Line 5624
C++
MFServer.exe!CVaultManager::OptimizeVaultMetaDataDatabase(long
lTaskID=5, const CMF_OptimizeVaultJob & optimizevaultjob={...}, bool
bExplicitExecution=false) Line 1293 C++
MFServer.exe!RPCScheduledJobsHelper::RunOptimizeVaultJob(long lTaskID=5,
const CMF_OptimizeVaultJob & optimizevaultjob={...}, bool
bExplicitExecution=false, CMF_ScheduledJobOutputInfo & joboutput={...})
Line 1285 + 0x2c C++
MFServer.exe!RPCScheduledJobsHelper::RunJob(const CMF_ScheduledJob &
schedjob={...}, CMFSession * pmfsess=0x00000000) Line 1361 + 0x25
C++
MFServer.exe!RPCScheduledJobsHelper::RunJobWithSmallestNextRunTime()
Line 1723 + 0x24 C++
MFServer.exe!CApplication::RunNextJob() Line 1703 + 0x19 C++
MFServer.exe!CApplication::ThreadProcJobScheduler(void *
pParam=0x008719d8) Line 1818 C++
MFServer.exe!_threadstartex(void * ptd=0x03f68910) Line 241 + 0x6
C
kernel32.dll!_BaseThreadStart@8() + 0x37


Thread 2720:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc
kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48
kernel32.dll!_WaitForMultipleObjects@16() + 0x18
gds32.dll!ISC_event_wait(short count=1, event_t * * events=0x07d3f218,
long * values=0x07d3f220, long micro_seconds=0, void (void *)*
timeout_handler=0x00000000, void * handler_arg=0x00000000) Line 1291
C++
gds32.dll!stall(thread * thread=0x00003a3c) Line 963 C++
gds32.dll!SCH_enter() Line 444 C++
gds32.dll!write_page(Jrd::thread_db * tdbb=0x07d3f324, Jrd::BufferDesc *
bdb=0x01a26b00, const bool write_thru=false, long * status=0x01a26bf8,
const bool inAst=false) Line 6369 C++
gds32.dll!write_buffer(Jrd::thread_db * tdbb=0x017ce630, Jrd::BufferDesc
* bdb=0x018a4d4c, long page=1843, const bool write_thru=false, long *
status=0x07d3f42c, const bool write_this_page=true) Line 6202 + 0xe
C++
gds32.dll!btc_flush(Jrd::thread_db * tdbb=0x07d3f324, long
transaction_mask=134217728, const bool sys_only=false, long *
status=0x07d3f42c) Line 2721 + 0x15 C++
gds32.dll!CCH_flush(Jrd::thread_db * tdbb=0x07d3f324, unsigned short
flush_flag=0, long tra_number=5819) Line 1240 + 0xd C++
gds32.dll!TRA_commit(Jrd::thread_db * tdbb=0x07d3f324, Jrd::jrd_tra *
transaction=0x01fa66dc, const bool retaining_flag=false) Line 459 + 0xa
C++
gds32.dll!commit(long * user_status=0x07d3f42c, Jrd::jrd_tra * *
tra_handle=0x00dbd244, const bool retaining_flag=false) Line 4874
C++
gds32.dll!jrd8_commit_transaction(long * user_status=0x07d3f42c,
Jrd::jrd_tra * * tra_handle=0x00dbd244) Line 1602 + 0x21 C++
gds32.dll!isc_commit_transaction(long * user_status=0x07d3f42c, void * *
tra_handle=0x020d41bc) Line 1115 + 0x14 C++
IBProv.dll!45e446bf()
oledb32.dll!ATL::CComContainedObject<CDSLWrapper>::Release() + 0x11
MFServer.exe!CMDynamicAccessorWithParams::BindParameters(unsigned long *
pHAccessor=0x00000000, ICommand * pCommand=0x07d3f4f8, void * *
ppParameterBuffer=0x00000000) Line 977 + 0x14 C++
0c58b5a8()
IBProv.dll!45e41571()
IBProv.dll!45e1c1e7()
IBProv.dll!45e18ea1()
IBProv.dll!45e9786e()
IBProv.dll!45e18b1c()
oledb32.dll!CACMComPolyObject<CSCM>::QueryInterface() + 0x29d
MFServer.exe!ATL::CSession::Commit(int bRetaining=0, unsigned long
grfTC=2, unsigned long grfRM=0) Line 6234 + 0x19 C++
MFServer.exe!CDBSession::Commit() Line 245 C++
MFServer.exe!RPCEventsHelper::CreateLogOutEvent(const CMFSession *
pmfsess=0x00d8e750) Line 896 + 0x1f C++
MFServer.exe!MF_LogOut(void * IDL_handle=0x00321830, _SESSIONID
sessID={...}, unsigned long * pulErrorCount=0x07d3fadc, _RPCErrorInfo *
* ppErrorValues=0x07d3faec) Line 377 + 0x1a C++
rpcrt4.dll!_Invoke@12() + 0x30
rpcrt4.dll!_NdrStubCall2@16() + 0x215
rpcrt4.dll!_NdrServerCall2@4() + 0x19
rpcrt4.dll!_DispatchToStubInC@12() + 0x17
rpcrt4.dll!RPC_INTERFACE::DispatchToStubWorker() + 0xa1
rpcrt4.dll!RPC_INTERFACE::DispatchToStub() + 0x41
rpcrt4.dll!LRPC_SCALL::DealWithRequestMessage() + 0x131
rpcrt4.dll!LRPC_ADDRESS::DealWithLRPCRequest() + 0x9c
rpcrt4.dll!LRPC_ADDRESS::ReceiveLotsaCalls() + 0x121
rpcrt4.dll!RecvLotsaCallsWrapper() + 0xd
rpcrt4.dll!BaseCachedThreadRoutine() + 0x51
rpcrt4.dll!ThreadStartRoutine() + 0x1a
kernel32.dll!_BaseThreadStart@8() + 0x37


Thread 3016:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc
kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48
kernel32.dll!_WaitForMultipleObjects@16() + 0x18
gds32.dll!ISC_event_wait(short count=1, event_t * * events=0x0606fe6c,
long * values=0x0606fe74, long micro_seconds=0, void (void *)*
timeout_handler=0x00000000, void * handler_arg=0x00000000) Line 1291
C++
gds32.dll!stall(thread * thread=0x00002162) Line 963 C++
gds32.dll!SCH_enter() Line 444 C++
gds32.dll!cache_writer(void * arg=0x00000001) Line 3961 C++
gds32.dll!`anonymous namespace'::threadStart(void * arg=0x00dbab1c)
Line 283 C++
msvcr71.dll!__endthreadex() + 0xa0
kernel32.dll!_BaseThreadStart@8() + 0x37


Thread 4048:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc
kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48
kernel32.dll!_WaitForMultipleObjects@16() + 0x18
gds32.dll!ISC_event_wait(short count=1, event_t * * events=0x0626fdec,
long * values=0x0626fdf4, long micro_seconds=0, void (void *)*
timeout_handler=0x00000000, void * handler_arg=0x00000000) Line 1291
C++
gds32.dll!stall(thread * thread=0x00000001) Line 963 C++
gds32.dll!SCH_enter() Line 444 C++
gds32.dll!garbage_collector(void * arg=0x007ce630) Line 3923 C++
gds32.dll!`anonymous namespace'::threadStart(void * arg=0x00dbab1c)
Line 283 C++
msvcr71.dll!__endthreadex() + 0xa0
kernel32.dll!_BaseThreadStart@8() + 0x37


Thread 3708:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc
kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48
kernel32.dll!_WaitForMultipleObjects@16() + 0x18
gds32.dll!ISC_event_wait(short count=1, event_t * * events=0x0525f068,
long * values=0x0525f070, long micro_seconds=0, void (void *)*
timeout_handler=0x00000000, void * handler_arg=0x00000000) Line 1291
C++
gds32.dll!stall(thread * thread=0x00000001) Line 963 C++
gds32.dll!SCH_enter() Line 444 C++
gds32.dll!isc_database_info(long * user_status=0x0525f10c, void * *
handle=0x0c57dfc8, short item_length=1, const char * items=0x0525f107,
short buffer_length=20, char * buffer=0x0525f15c) Line 1594 C++
IBProv.dll!45e3ec30()
advapi32.dll!_BaseSetLastNTError@4() + 0x18
ntdll.dll!_NtOpenProcessToken@12() + 0xc
ntdll.dll!_NtCompareTokens@12() + 0xc
ntdll.dll!_ZwClose@4() + 0xc
oledb32.dll!CDCMPool::IsTheSameToken() + 0x54


Thread 3880:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc
kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48
kernel32.dll!_WaitForMultipleObjects@16() + 0x18
gds32.dll!ISC_event_wait(short count=1, event_t * * events=0x034afe6c,
long * values=0x034afe74, long micro_seconds=0, void (void *)*
timeout_handler=0x00000000, void * handler_arg=0x00000000) Line 1291
C++
gds32.dll!stall(thread * thread=0x00004001) Line 963 C++
gds32.dll!SCH_enter() Line 444 C++
gds32.dll!cache_writer(void * arg=0x00000001) Line 3961 C++
gds32.dll!`anonymous namespace'::threadStart(void * arg=0x00dbccc4)
Line 283 C++
msvcr71.dll!__endthreadex() + 0xa0
kernel32.dll!_BaseThreadStart@8() + 0x37


Thread 3164:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc
kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48
kernel32.dll!_WaitForMultipleObjects@16() + 0x18
gds32.dll!ISC_event_wait(short count=1, event_t * * events=0x0396fdec,
long * values=0x0396fdf4, long micro_seconds=0, void (void *)*
timeout_handler=0x00000000, void * handler_arg=0x00000000) Line 1291
C++
gds32.dll!stall(thread * thread=0x00000067) Line 963 C++
gds32.dll!SCH_enter() Line 444 C++
gds32.dll!garbage_collector(void * arg=0x00dbe630) Line 3923 C++
gds32.dll!`anonymous namespace'::threadStart(void * arg=0x00dbcb8c)
Line 283 C++
msvcr71.dll!__endthreadex() + 0xa0
kernel32.dll!_BaseThreadStart@8() + 0x37


Thread 2084:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc
kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48
kernel32.dll!_WaitForMultipleObjects@16() + 0x18
gds32.dll!ISC_event_wait(short count=1, event_t * * events=0x03b6fe6c,
long * values=0x03b6fe74, long micro_seconds=0, void (void *)*
timeout_handler=0x00000000, void * handler_arg=0x00000000) Line 1291
C++
gds32.dll!stall(thread * thread=0x000016e1) Line 963 C++
gds32.dll!SCH_enter() Line 444 C++
gds32.dll!cache_writer(void * arg=0x00000001) Line 3961 C++
gds32.dll!`anonymous namespace'::threadStart(void * arg=0x00dbccdc)
Line 283 C++
msvcr71.dll!__endthreadex() + 0xa0
kernel32.dll!_BaseThreadStart@8() + 0x37


Thread 1444:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc
kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48
kernel32.dll!_WaitForMultipleObjects@16() + 0x18
gds32.dll!ISC_event_wait(short count=1, event_t * * events=0x0813fdec,
long * values=0x0813fdf4, long micro_seconds=0, void (void *)*
timeout_handler=0x00000000, void * handler_arg=0x00000000) Line 1291
C++
gds32.dll!stall(thread * thread=0x00002e69) Line 963 C++
gds32.dll!SCH_enter() Line 444 C++
gds32.dll!garbage_collector(void * arg=0x00e3e630) Line 3923 C++
gds32.dll!`anonymous namespace'::threadStart(void * arg=0x00dbccdc)
Line 283 C++
msvcr71.dll!__endthreadex() + 0xa0
kernel32.dll!_BaseThreadStart@8() + 0x37


Thread 3392:

ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc
kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48
kernel32.dll!_WaitForMultipleObjects@16() + 0x18
gds32.dll!ISC_event_wait(short count=1, event_t * * events=0x03d6f068,
long * values=0x03d6f070, long micro_seconds=0, void (void *)*
timeout_handler=0x00000000, void * handler_arg=0x00000000) Line 1291
C++
gds32.dll!stall(thread * thread=0x00000001) Line 963 C++
gds32.dll!SCH_enter() Line 444 C++
gds32.dll!isc_database_info(long * user_status=0x03d6f10c, void * *
handle=0x02199030, short item_length=1, const char * items=0x03d6f107,
short buffer_length=20, char * buffer=0x03d6f15c) Line 1594 C++
IBProv.dll!45e3ec30()
advapi32.dll!_BaseSetLastNTError@4() + 0x18
ntdll.dll!_NtOpenProcessToken@12() + 0xc
ntdll.dll!_NtCompareTokens@12() + 0xc
ntdll.dll!_ZwClose@4() + 0xc
oledb32.dll!CDCMPool::IsTheSameToken() + 0x54



This was a one-time deadlock. We had to kill the process. The deadlock
has not occurred again, but of course it would be important to fix any
such problems in Firebird if this information enables locating & fixing
the issue.


Best regards,
Antti Nivala

------------------------------------------

Motive Systems
http://www.motivesys.com
###########################################

This message has been scanned by F-Secure Anti-Virus for Microsoft Exchange.
For more information, connect to http://www.f-secure.com/