From 8276b51f5692796bfdf75dd64f709e0de1c7caaf Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Thu, 31 Jul 2008 04:28:58 -0400 Subject: A new binary_cache_t object has been creating to manage saving and restoring a Ledger session from a cache file. It doesn't work at all yet, though at least the major structures are in place now. --- entry.cc | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'entry.cc') diff --git a/entry.cc b/entry.cc index 0fcd8ff3..4a9537ca 100644 --- a/entry.cc +++ b/entry.cc @@ -36,7 +36,8 @@ namespace ledger { entry_base_t::entry_base_t(const entry_base_t& e) - : journal(NULL), beg_pos(0), beg_line(0), end_pos(0), end_line(0) + : supports_flags<>(), journal(NULL), + beg_pos(0), beg_line(0), end_pos(0), end_line(0) { TRACE_CTOR(entry_base_t, "copy"); @@ -53,10 +54,15 @@ entry_base_t::~entry_base_t() for (xacts_list::iterator i = xacts.begin(); i != xacts.end(); i++) - if (! (*i)->has_flags(XACT_BULK_ALLOC)) - checked_delete(*i); - else - (*i)->~xact_t(); + // If the transaction is a temporary, it will be destructed when the + // temporary is. If it's from a binary cache, we can safely destruct it + // but its memory will be deallocated with the cache. + if (! (*i)->has_flags(XACT_TEMP)) { + if (! (*i)->has_flags(XACT_IN_CACHE)) + checked_delete(*i); + else + (*i)->~xact_t(); + } } void entry_base_t::add_xact(xact_t * xact) -- cgit v1.2.3