Fixed a memory leak that would show up if --verify --verbose was running and

an error or exception occurred.
This commit is contained in:
John Wiegley 2008-08-10 01:41:59 -04:00
parent c9d575abce
commit ba02f0a450
4 changed files with 34 additions and 8 deletions

View file

@ -122,11 +122,23 @@ class account_t : public scope_t
: supports_flags<>(), count(0), total_count(0), : supports_flags<>(), count(0), total_count(0),
virtuals(0), dflags(0) virtuals(0), dflags(0)
{ {
TRACE_CTOR(xdata_t, ""); TRACE_CTOR(account_t::xdata_t, "");
}
xdata_t(const xdata_t& other)
: supports_flags<>(other.flags()),
value(other.value),
total(other.total),
sort_value(other.sort_value),
count(other.count),
total_count(other.total_count),
virtuals(other.virtuals),
dflags(other.dflags)
{
TRACE_CTOR(account_t::xdata_t, "copy");
} }
~xdata_t() throw() { ~xdata_t() throw() {
TRACE_DTOR(xdata_t); TRACE_DTOR(account_t::xdata_t);
} }
}; };

View file

@ -45,9 +45,12 @@ public:
supports_flags() : flags_(0) { supports_flags() : flags_(0) {
TRACE_CTOR(supports_flags, ""); TRACE_CTOR(supports_flags, "");
} }
supports_flags(const flags_t& arg) : flags_(arg) { supports_flags(const supports_flags& arg) : flags_(arg.flags_) {
TRACE_CTOR(supports_flags, "copy"); TRACE_CTOR(supports_flags, "copy");
} }
supports_flags(const flags_t& arg) : flags_(arg) {
TRACE_CTOR(supports_flags, "const flags_t&");
}
~supports_flags() throw() { ~supports_flags() throw() {
TRACE_DTOR(supports_flags); TRACE_DTOR(supports_flags);
} }

View file

@ -566,9 +566,7 @@ int main(int argc, char * argv[], char * envp[])
status = read_and_report(*session->current_report.get(), argc, argv, envp); status = read_and_report(*session->current_report.get(), argc, argv, envp);
if (DO_VERIFY()) if (! DO_VERIFY())
ledger::set_session_context();
else
session.release(); // don't free anything! just let it leak session.release(); // don't free anything! just let it leak
} }
catch (const std::exception& err) { catch (const std::exception& err) {
@ -582,6 +580,7 @@ int main(int argc, char * argv[], char * envp[])
IF_VERIFY() { IF_VERIFY() {
INFO("Ledger ended (Boost/libstdc++ may still hold memory)"); INFO("Ledger ended (Boost/libstdc++ may still hold memory)");
ledger::set_session_context();
ledger::shutdown_memory_tracing(); ledger::shutdown_memory_tracing();
} else { } else {
INFO("Ledger ended"); INFO("Ledger ended");

View file

@ -155,10 +155,22 @@ public:
optional<xacts_list> component_xacts; optional<xacts_list> component_xacts;
xdata_t() : supports_flags<>(), index(0), account(NULL), ptr(NULL) { xdata_t() : supports_flags<>(), index(0), account(NULL), ptr(NULL) {
TRACE_CTOR(xdata_t, ""); TRACE_CTOR(xact_t::xdata_t, "");
}
xdata_t(const xdata_t& other)
: supports_flags<>(other.flags()),
total(other.total),
sort_value(other.sort_value),
value(other.value),
index(other.index),
date(other.date),
account(other.account),
ptr(NULL)
{
TRACE_CTOR(xact_t::xdata_t, "copy");
} }
~xdata_t() throw() { ~xdata_t() throw() {
TRACE_DTOR(xdata_t); TRACE_DTOR(xact_t::xdata_t);
} }
void remember_xact(xact_t& xact) { void remember_xact(xact_t& xact) {