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

Fixed some memory leaks

This commit is contained in:
skidder 2002-09-26 18:13:02 +00:00
parent 3acdfa81c4
commit 040bd8e499
4 changed files with 25 additions and 18 deletions

View File

@ -30,7 +30,7 @@
* This closes the heart of SF Bug #518282.
*/
/*
$Id: cmp.cpp,v 1.11 2002-09-25 17:12:09 skidder Exp $
$Id: cmp.cpp,v 1.12 2002-09-26 18:13:02 skidder Exp $
*/
#include "firebird.h"
@ -356,6 +356,8 @@ REQ DLL_EXPORT CMP_compile2(TDBB tdbb, UCHAR* blr, USHORT internal_flag)
SET_TDBB(tdbb);
JrdMemoryPool* old_pool = tdbb->tdbb_default;
/* 26.09.2002 Nickolay Samofatov: default memory pool will become statement pool
and will be freed by CMP_release */
JrdMemoryPool* new_pool = FB_NEW(*tdbb->tdbb_database->dbb_permanent)
JrdMemoryPool;
tdbb->tdbb_default = new_pool;
@ -388,6 +390,7 @@ REQ DLL_EXPORT CMP_compile2(TDBB tdbb, UCHAR* blr, USHORT internal_flag)
} else if (new_pool) {
// TMN: Are we not to release the pool, just beqause
// we have a request?!
// Nickolay Samofatv: It well be freed by CMP_release otherwise
delete new_pool;
}
ERR_punt();

View File

@ -3194,6 +3194,7 @@ static void get_procedure_dependencies(DFW work)
if (procedure && !NULL_BLOB(blob_id))
{
old_pool = tdbb->tdbb_default;
/* Nickolay Samofatov: allocate statement memory pool... */
tdbb->tdbb_default = FB_NEW(*dbb->dbb_permanent) JrdMemoryPool;
MET_get_dependencies(tdbb,
(struct rel*)NULL_PTR,

View File

@ -226,17 +226,28 @@ static REC_MUTX_T databases_rec_mutex;
void trig::compile(tdbb* _tdbb) {
if (!request && !compile_in_progress) {
JrdMemoryPool* old_pool;
SET_TDBB(_tdbb);
compile_in_progress = TRUE;
old_pool = _tdbb->tdbb_default;
_tdbb->tdbb_default = FB_NEW(*getDefaultMemoryPool()) JrdMemoryPool;
JrdMemoryPool* old_pool = _tdbb->tdbb_default,
*new_pool = FB_NEW(*getDefaultMemoryPool()) JrdMemoryPool;
/* Allocate statement memory pool */
_tdbb->tdbb_default = new_pool;
// Trigger request is not compiled yet. Lets do it now
PAR_blr(_tdbb, relation, blr->str_data,
(CSB)NULL_PTR, (CSB*)NULL_PTR, &request, TRUE,
(USHORT)(flags & TRG_ignore_perm ? csb_ignore_perm : 0));
try {
PAR_blr(_tdbb, relation, blr->str_data,
(CSB)NULL_PTR, (CSB*)NULL_PTR, &request, TRUE,
(USHORT)(flags & TRG_ignore_perm ? csb_ignore_perm : 0));
_tdbb->tdbb_default = old_pool;
} catch (...) {
_tdbb->tdbb_default = old_pool;
compile_in_progress = FALSE;
if (request)
CMP_release(_tdbb,request);
else
delete new_pool;
throw;
}
_tdbb->tdbb_default = old_pool;
if (name)

View File

@ -35,7 +35,7 @@
* 2002-09-16 Nickolay Samofatov - Deferred trigger compilation changes
*/
/*
$Id: met.epp,v 1.18 2002-09-25 17:12:10 skidder Exp $
$Id: met.epp,v 1.19 2002-09-26 18:13:02 skidder Exp $
*/
// This MUST be at the top of the file
#ifdef DARWIN
@ -3610,22 +3610,14 @@ static void get_trigger(
SET_TDBB(tdbb);
JrdMemoryPool* old_pool;
SET_TDBB(tdbb);
if (!blob_id[0] && !blob_id[1])
return;
old_pool = tdbb->tdbb_default;
tdbb->tdbb_default = FB_NEW(*getDefaultMemoryPool()) JrdMemoryPool;
DBB dbb = tdbb->tdbb_database;
BLB blob = BLB_open(tdbb, dbb->dbb_sys_trans, (BID)blob_id);
SLONG length = blob->blb_length + 10;
STR blr = FB_NEW_RPT(*tdbb->tdbb_default,length) str();
STR blr = FB_NEW_RPT(*dbb->dbb_permanent,length) str();
BLB_get_data(tdbb, blob, blr->str_data, length);
tdbb->tdbb_default = old_pool;
save_trigger_data(tdbb, ptr, relation, NULL, blr, name, sys_trigger, flags);
}