[Transaction.c] use is_unset static to denote uncached readonly_reason

tests in 128c8d6f88
This commit is contained in:
Christopher Lam
2021-09-25 00:09:47 +08:00
parent b8c9b1a6ce
commit d82bb7b8a2
3 changed files with 12 additions and 25 deletions

View File

@@ -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,6 +817,7 @@ xaccFreeTransaction (Transaction *trans)
/* free up transaction strings */
CACHE_REMOVE(trans->num);
CACHE_REMOVE(trans->description);
if (trans->readonly_reason != is_unset)
g_free (trans->readonly_reason);
if (trans->doclink != is_unset)
g_free (trans->doclink);
@@ -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);
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);
if (trans->readonly_reason != is_unset)
g_free (trans->readonly_reason);
trans->readonly_reason = g_strdup (reason);
trans->reason_cache_valid = TRUE;
}
}
@@ -2570,23 +2569,14 @@ 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);
trans->readonly_reason = G_VALUE_HOLDS_STRING (&v) ?
g_value_dup_string (&v) : NULL;
g_value_unset (&v);
}
trans->reason_cache_valid = TRUE;
}
return trans->readonly_reason;
}

View File

@@ -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;

View File

@@ -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)