8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-02-02 10:00:38 +01:00

Fixed #7703: Requests leak in AutoCacheRequest

This commit is contained in:
AlexPeshkoff 2023-08-09 19:36:40 +03:00
parent 137e997ad3
commit c1e58febd4
2 changed files with 27 additions and 13 deletions

View File

@ -1719,3 +1719,29 @@ static void trigger_failure(thread_db* tdbb, Request* trigger)
ERR_punt();
}
}
void AutoCacheRequest::cacheRequest()
{
thread_db* tdbb = JRD_get_thread_data();
Attachment* att = tdbb->getAttachment();
Statement** stmt = which == IRQ_REQUESTS ? &att->att_internal[id] :
which == DYN_REQUESTS ? &att->att_dyn_req[id] : nullptr;
if (!stmt)
{
fb_assert(false);
return;
}
if (*stmt)
{
// self resursive call already filled cache
request->getStatement()->release(tdbb);
request = att->findSystemRequest(tdbb, id, which);
fb_assert(request);
}
else
*stmt = request->getStatement();
}

View File

@ -124,19 +124,7 @@ namespace Jrd
}
}
inline void cacheRequest()
{
Jrd::Attachment* att = JRD_get_thread_data()->getAttachment();
if (which == IRQ_REQUESTS)
att->att_internal[id] = request->getStatement();
else if (which == DYN_REQUESTS)
att->att_dyn_req[id] = request->getStatement();
else
{
fb_assert(false);
}
}
void cacheRequest();
private:
USHORT id;