Hmm. Hard to miss that gobs of cycles are being wasted passing both a thread and a request object around. Since the request can only execute at any point on a single thread, the request object can point to the active thread.
Jim Starkey > On Apr 6, 2015, at 2:06 PM, Dimitry Sibiryakov <s...@ibphoenix.com> wrote: > > 06.04.2015 19:31, Alex Peshkoff wrote: >> You provide me your conclusion instead of what I've asked... > > If you wish, here is call stack: > > fbrepl.dll!ReplTransaction::processInsert(Firebird::CheckStatusWrapper * > status, > Firebird::IAttachment * att, Firebird::ITransaction * tra, Firebird::IRecord > * new_data) > Line 302 + 0xa bytes C++ > engine12.dll!REPL_store(Jrd::thread_db * tdbb, Jrd::record_param * > newRecord, > Jrd::jrd_tra * transaction) Line 111 + 0xa0 bytes C++ > engine12.dll!Jrd::StoreNode::store(Jrd::thread_db * tdbb, Jrd::jrd_req * > request, > Jrd::StmtNode::WhichTrigger whichTrig) Line 6715 + 0x11 bytes C++ > engine12.dll!Jrd::StoreNode::execute(Jrd::thread_db * tdbb, Jrd::jrd_req > * request, > Jrd::StmtNode::ExeState * exeState) Line 6651 + 0x12 bytes C++ > engine12.dll!EXE_looper(Jrd::thread_db * tdbb, Jrd::jrd_req * request, > const > Jrd::StmtNode * node) Line 1318 + 0x1b bytes C++ > engine12.dll!looper_seh(Jrd::thread_db * tdbb, Jrd::jrd_req * request, > const > Jrd::StmtNode * node) Line 1437 + 0x11 bytes C++ > engine12.dll!execute_looper(Jrd::thread_db * tdbb, Jrd::jrd_req * > request, Jrd::jrd_tra > * transaction, const Jrd::StmtNode * node, Jrd::jrd_req::req_s next_state) > Line 1046 + > 0x11 bytes C++ > engine12.dll!EXE_send(Jrd::thread_db * tdbb, Jrd::jrd_req * request, > unsigned short > msg, unsigned long length, const unsigned char * buffer) Line 854 + 0x1d > bytes C++ > engine12.dll!Jrd::CreateRelationNode::execute(Jrd::thread_db * tdbb, > Jrd::DsqlCompilerScratch * dsqlScratch, Jrd::jrd_tra * transaction) Line > 20371 + 0x23 > bytes C++ > engine12.dll!Jrd::DdlNode::executeDdl(Jrd::thread_db * tdbb, > Jrd::DsqlCompilerScratch * > dsqlScratch, Jrd::jrd_tra * transaction) Line 190 + 0x1b bytes C++ > engine12.dll!Jrd::DsqlDdlRequest::execute(Jrd::thread_db * tdbb, > Jrd::jrd_tra * * > traHandle, Firebird::IMessageMetadata * inMetadata, const unsigned char * > inMsg, > Firebird::IMessageMetadata * outMetadata, unsigned char * outMsg, bool > singleton) Line > 842 C++ > engine12.dll!DSQL_execute_immediate(Jrd::thread_db * tdbb, > Jrd::Attachment * > attachment, Jrd::jrd_tra * * tra_handle, unsigned long length, const char * > string, > unsigned short dialect, Firebird::IMessageMetadata * in_meta, const unsigned > char * > in_msg, Firebird::IMessageMetadata * out_meta, unsigned char * out_msg, bool > isInternalRequest) Line 548 + 0x2c bytes C++ > engine12.dll!Jrd::JAttachment::execute(Firebird::CheckStatusWrapper * > user_status, > Firebird::ITransaction * apiTra, unsigned int length, const char * string, > unsigned int > dialect, Firebird::IMessageMetadata * inMetadata, void * inBuffer, > Firebird::IMessageMetadata * outMetadata, void * outBuffer) Line 4598 + 0x49 > bytes C++ > > engine12.dll!Firebird::IAttachmentBaseImpl<Jrd::JAttachment,Firebird::CheckStatusWrapper,Firebird::IReferenceCountedImpl<Jrd::JAttachment,Firebird::CheckStatusWrapper,Firebird::Inherit<Firebird::IVersionedImpl<Jrd::JAttachment,Firebird::CheckStatusWrapper,Firebird::Inherit<Firebird::IAttachment> > >>>>> ::cloopexecuteDispatcher(Firebird::IAttachment * self, Firebird::IStatus >>>>> * status, > Firebird::ITransaction * transaction, unsigned int stmtLength, const char * > sqlStmt, > unsigned int dialect, Firebird::IMessageMetadata * inMetadata, void * > inBuffer, > Firebird::IMessageMetadata * outMetadata, void * outBuffer) Line 8415 + 0x4d > bytes C++ > > fbclient.dll!Firebird::IAttachment::execute<Firebird::CheckStatusWrapper>(Firebird::CheckStatusWrapper > > * status, Firebird::ITransaction * transaction, unsigned int stmtLength, > const char * > sqlStmt, unsigned int dialect, Firebird::IMessageMetadata * inMetadata, void > * inBuffer, > Firebird::IMessageMetadata * outMetadata, void * outBuffer) Line 1894 + 0x56 > bytes C++ > fbclient.dll!Why::YAttachment::execute(Firebird::CheckStatusWrapper * > status, > Firebird::ITransaction * transaction, unsigned int length, const char * > string, unsigned > int dialect, Firebird::IMessageMetadata * inMetadata, void * inBuffer, > Firebird::IMessageMetadata * outMetadata, void * outBuffer) Line 5222 + 0x4e > bytes C++ > > fbclient.dll!Firebird::IAttachmentBaseImpl<Why::YAttachment,Firebird::CheckStatusWrapper,Firebird::IReferenceCountedImpl<Why::YAttachment,Firebird::CheckStatusWrapper,Firebird::Inherit<Firebird::IVersionedImpl<Why::YAttachment,Firebird::CheckStatusWrapper,Firebird::Inherit<Firebird::IAttachment> > >>>>> ::cloopexecuteDispatcher(Firebird::IAttachment * self, Firebird::IStatus >>>>> * status, > Firebird::ITransaction * transaction, unsigned int stmtLength, const char * > sqlStmt, > unsigned int dialect, Firebird::IMessageMetadata * inMetadata, void * > inBuffer, > Firebird::IMessageMetadata * outMetadata, void * outBuffer) Line 8415 + 0x4d > bytes C++ > > isql.exe!Firebird::IAttachment::execute<Firebird::CheckStatusWrapper>(Firebird::CheckStatusWrapper > > * status, Firebird::ITransaction * transaction, unsigned int stmtLength, > const char * > sqlStmt, unsigned int dialect, Firebird::IMessageMetadata * inMetadata, void > * inBuffer, > Firebird::IMessageMetadata * outMetadata, void * outBuffer) Line 1894 + 0x56 > bytes C++ > isql.exe!process_statement(const char * str2) Line 10090 C++ > isql.exe!do_isql() Line 5767 + 0xc bytes C++ > isql.exe!ISQL_main(int argc, char * * argv) Line 1659 C++ > isql.exe!main(int argc, char * * argv) Line 1555 + 0xd bytes C++ > isql.exe!__tmainCRTStartup() Line 555 + 0x19 bytes C > isql.exe!mainCRTStartup() Line 371 C > kernel32.dll!BaseThreadInitThunk() + 0xe bytes > > -- > WBR, SD. > > ------------------------------------------------------------------------------ > BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT > Develop your own process in accordance with the BPMN 2 standard > Learn Process modeling best practices with Bonita BPM through live exercises > http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_ > source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF > Firebird-Devel mailing list, web interface at > https://lists.sourceforge.net/lists/listinfo/firebird-devel ------------------------------------------------------------------------------ BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT Develop your own process in accordance with the BPMN 2 standard Learn Process modeling best practices with Bonita BPM through live exercises http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_ source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel