From: <hv...@us...> - 2012-07-23 09:30:04
|
Revision: 54738 http://firebird.svn.sourceforge.net/firebird/?rev=54738&view=rev Author: hvlad Date: 2012-07-23 09:29:53 +0000 (Mon, 23 Jul 2012) Log Message: ----------- Fixed bug CORE-3895 : High memory usage when PSQL code SELECT's from stored procedure which modified some data Modified Paths: -------------- firebird/branches/B2_1_Release/src/jrd/exe.cpp firebird/branches/B2_1_Release/src/jrd/tra.h Modified: firebird/branches/B2_1_Release/src/jrd/exe.cpp =================================================================== --- firebird/branches/B2_1_Release/src/jrd/exe.cpp 2012-07-23 09:20:57 UTC (rev 54737) +++ firebird/branches/B2_1_Release/src/jrd/exe.cpp 2012-07-23 09:29:53 UTC (rev 54738) @@ -3194,7 +3194,7 @@ ************************************** * * Functional description - * Release temporary blobs assigned by this request. + * Release savepoints used by this request. * **************************************/ Savepoint* sav_point = request->req_proc_sav_point; Modified: firebird/branches/B2_1_Release/src/jrd/tra.h =================================================================== --- firebird/branches/B2_1_Release/src/jrd/tra.h 2012-07-23 09:20:57 UTC (rev 54737) +++ firebird/branches/B2_1_Release/src/jrd/tra.h 2012-07-23 09:29:53 UTC (rev 54738) @@ -239,7 +239,13 @@ class Savepoint : public pool_alloc<type_sav> { - public: +public: + ~Savepoint() + { + deleteActions(sav_verb_actions); + deleteActions(sav_verb_free); + } + VerbAction* sav_verb_actions; /* verb action list */ VerbAction* sav_verb_free; /* free verb actions */ USHORT sav_verb_count; /* Active verb count */ @@ -247,6 +253,9 @@ Savepoint* sav_next; USHORT sav_flags; TEXT sav_name[32]; /* Savepoint name */ + +private: + void deleteActions(VerbAction* list); }; /* Savepoint block flags. */ @@ -339,13 +348,30 @@ class VerbAction : public pool_alloc<type_vct> { - public: +public: + ~VerbAction() + { + delete vct_records; + delete vct_undo; + } + VerbAction* vct_next; /* Next action within verb */ jrd_rel* vct_relation; /* Relation involved */ RecordBitmap* vct_records; /* Record involved */ UndoItemTree* vct_undo; /* Data for undo records */ }; + +inline void Savepoint::deleteActions(VerbAction* list) +{ + while (list) + { + VerbAction* next = list->vct_next; + delete list; + list = next; + } +}; + } //namespace Jrd #endif // JRD_TRA_H This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |