@@ -4823,6 +4823,7 @@ void JAttachment::transactRequest(CheckStatusWrapper* user_status, ITransaction*
48234823 JTransaction* const jt = getTransactionInterface (user_status, tra);
48244824 EngineContextHolder tdbb (user_status, this , FB_FUNCTION);
48254825
4826+ Request* request = nullptr ;
48264827 jrd_tra* transaction = jt->getHandle ();
48274828 validateHandle (tdbb, transaction);
48284829 check_database (tdbb);
@@ -4834,7 +4835,6 @@ void JAttachment::transactRequest(CheckStatusWrapper* user_status, ITransaction*
48344835 const MessageNode* inMessage = NULL ;
48354836 const MessageNode* outMessage = NULL ;
48364837
4837- Request* request = NULL ;
48384838 MemoryPool* new_pool = att->createPool ();
48394839
48404840 try
@@ -4860,9 +4860,7 @@ void JAttachment::transactRequest(CheckStatusWrapper* user_status, ITransaction*
48604860 }
48614861 catch (const Exception&)
48624862 {
4863- if (request)
4864- CMP_release (tdbb, request);
4865- else
4863+ if (!request)
48664864 att->deletePool (new_pool);
48674865
48684866 throw ;
@@ -4895,6 +4893,15 @@ void JAttachment::transactRequest(CheckStatusWrapper* user_status, ITransaction*
48954893
48964894 if (out_msg_length)
48974895 {
4896+ // Workaround for GPRE that generated unneeded blr_send
4897+ if ((request->req_flags & req_active)
4898+ && request->req_operation == Request::req_send)
4899+ {
4900+ request->req_flags &= ~req_stall;
4901+ request->req_operation = Request::req_proceed;
4902+ EXE_looper (tdbb, request, request->req_next );
4903+ }
4904+
48984905 memcpy (out_msg, outMessage->getBuffer (request), out_msg_length);
48994906 }
49004907
@@ -4904,6 +4911,9 @@ void JAttachment::transactRequest(CheckStatusWrapper* user_status, ITransaction*
49044911 }
49054912 catch (const Exception& ex)
49064913 {
4914+ if (request)
4915+ CMP_release (tdbb, request);
4916+
49074917 transliterateException (tdbb, ex, user_status, " JAttachment::transactRequest" );
49084918 return ;
49094919 }
0 commit comments