From d82bb7b8a221c7cf1649217b26db1396d034cc56 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Sat, 25 Sep 2021 00:09:47 +0800 Subject: [PATCH] [Transaction.c] use is_unset static to denote uncached readonly_reason tests in 128c8d6f8864790ffe4bba9be2349d991fda4c8c --- libgnucash/engine/Transaction.c | 32 +++++++-------------- libgnucash/engine/TransactionP.h | 4 +-- libgnucash/engine/mocks/gmock-Transaction.h | 1 - 3 files changed, 12 insertions(+), 25 deletions(-) diff --git a/libgnucash/engine/Transaction.c b/libgnucash/engine/Transaction.c index 7f12f80a21..489e883b95 100644 --- a/libgnucash/engine/Transaction.c +++ b/libgnucash/engine/Transaction.c @@ -274,8 +274,7 @@ gnc_transaction_init(Transaction* trans) trans->date_posted = 0; trans->marker = 0; trans->orig = NULL; - trans->readonly_reason = NULL; - trans->reason_cache_valid = FALSE; + trans->readonly_reason = (char*) is_unset; trans->isClosingTxn_cached = -1; trans->notes = (char*) is_unset; trans->doclink = (char*) is_unset; @@ -818,7 +817,8 @@ xaccFreeTransaction (Transaction *trans) /* free up transaction strings */ CACHE_REMOVE(trans->num); CACHE_REMOVE(trans->description); - g_free (trans->readonly_reason); + if (trans->readonly_reason != is_unset) + g_free (trans->readonly_reason); if (trans->doclink != is_unset) g_free (trans->doclink); if (trans->void_reason != is_unset) @@ -832,7 +832,6 @@ xaccFreeTransaction (Transaction *trans) trans->date_entered = 0; trans->date_posted = 0; trans->readonly_reason = NULL; - trans->reason_cache_valid = FALSE; trans->doclink = NULL; trans->notes = NULL; trans->void_reason = NULL; @@ -2130,9 +2129,9 @@ void xaccTransClearReadOnly (Transaction *trans) qof_instance_set_dirty(QOF_INSTANCE(trans)); xaccTransCommitEdit(trans); - g_free (trans->readonly_reason); + if (trans->readonly_reason != is_unset) + g_free (trans->readonly_reason); trans->readonly_reason = NULL; - trans->reason_cache_valid = TRUE; } } @@ -2150,9 +2149,9 @@ xaccTransSetReadOnly (Transaction *trans, const char *reason) g_value_unset (&v); xaccTransCommitEdit(trans); - g_free (trans->readonly_reason); + if (trans->readonly_reason != is_unset) + g_free (trans->readonly_reason); trans->readonly_reason = g_strdup (reason); - trans->reason_cache_valid = TRUE; } } @@ -2570,22 +2569,13 @@ xaccTransGetReadOnly (Transaction *trans) if (!trans) return NULL; - if (!trans->reason_cache_valid) + if (trans->readonly_reason == is_unset) { GValue v = G_VALUE_INIT; qof_instance_get_kvp (QOF_INSTANCE(trans), &v, 1, TRANS_READ_ONLY_REASON); - - /* Clear possible old cache value first */ - g_free (trans->readonly_reason); - trans->readonly_reason = NULL; - - /* Then set the new one */ - if (G_VALUE_HOLDS_STRING (&v)) - { - trans->readonly_reason = g_value_dup_string (&v); - g_value_unset (&v); - } - trans->reason_cache_valid = TRUE; + trans->readonly_reason = G_VALUE_HOLDS_STRING (&v) ? + g_value_dup_string (&v) : NULL; + g_value_unset (&v); } return trans->readonly_reason; } diff --git a/libgnucash/engine/TransactionP.h b/libgnucash/engine/TransactionP.h index f7c4553814..d7b141d0cf 100644 --- a/libgnucash/engine/TransactionP.h +++ b/libgnucash/engine/TransactionP.h @@ -114,11 +114,9 @@ struct transaction_s /* The readonly_reason is a string that indicates why a transaction * is marked as read-only. If NULL, the transaction is read-write. * This value is stored in kvp, but we cache a copy here for - * performance reasons. reason_cache_valid indicates whether the - * cached value is valid. + * performance reasons. */ char * readonly_reason; - gboolean reason_cache_valid; char * doclink; char * void_reason; diff --git a/libgnucash/engine/mocks/gmock-Transaction.h b/libgnucash/engine/mocks/gmock-Transaction.h index 61fc4a4ae6..ce82437fa7 100644 --- a/libgnucash/engine/mocks/gmock-Transaction.h +++ b/libgnucash/engine/mocks/gmock-Transaction.h @@ -33,7 +33,6 @@ public: marker = 0; orig = nullptr; readonly_reason = nullptr; - reason_cache_valid = FALSE; isClosingTxn_cached = -1; } void* operator new(size_t size)