Subject Re: [firebird-support] Firebird 2.0.1.12855 deadlock, call stacks included
Author Dmitry Yemanov
Antti Nivala wrote:
>
> 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()

I'm wondering how IBProv.dll can be upper in the stack than gds32. The
same for some other threads.

> Thread 2692:
>
> 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++

The above call sequence can never happen.

> 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++

This stack is incomplete, as there's no high-level caller at all.

So I had to admit this stack trace is pretty useless, unfortunately.


Dmitry