diff options
Diffstat (limited to 'lib/tdb2/tdb1_transaction.c')
-rw-r--r-- | lib/tdb2/tdb1_transaction.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/lib/tdb2/tdb1_transaction.c b/lib/tdb2/tdb1_transaction.c index 126f768468..6e39de33f4 100644 --- a/lib/tdb2/tdb1_transaction.c +++ b/lib/tdb2/tdb1_transaction.c @@ -418,18 +418,34 @@ static const struct tdb1_methods transaction1_methods = { static int _tdb1_transaction_start(struct tdb_context *tdb) { /* some sanity checks */ - if ((tdb->flags & TDB_RDONLY) || (tdb->flags & TDB_INTERNAL) || tdb->tdb1.traverse_read) { - tdb->last_error = tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_LOG_USE_ERROR, - "tdb1_transaction_start: cannot start a" - " transaction on a read-only or" - " internal db"); + if (tdb->flags & TDB_INTERNAL) { + tdb->last_error = tdb_logerr(tdb, TDB_ERR_EINVAL, + TDB_LOG_USE_ERROR, + "tdb1_transaction_start:" + " cannot start a" + " transaction on an" + " internal tdb"); + return -1; + } + + if ((tdb->flags & TDB_RDONLY) || tdb->tdb1.traverse_read) { + tdb->last_error = tdb_logerr(tdb, TDB_ERR_RDONLY, + TDB_LOG_USE_ERROR, + "tdb_transaction_start:" + " cannot start a" + " transaction on a " + " read-only tdb"); return -1; } /* cope with nested tdb1_transaction_start() calls */ if (tdb->tdb1.transaction != NULL) { if (!(tdb->flags & TDB_ALLOW_NESTING)) { - tdb->last_error = TDB_ERR_EINVAL; + tdb->last_error + = tdb_logerr(tdb, TDB_ERR_EINVAL, + TDB_LOG_USE_ERROR, + "tdb_transaction_start:" + " already inside transaction"); return -1; } tdb->stats.transaction_nest++; |