* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rbtdb.c,v 1.168.2.17 2004/04/15 01:38:07 marka Exp $ */
+/* $Id: rbtdb.c,v 1.168.2.18 2004/05/23 11:05:21 marka Exp $ */
/*
* Principal Author: Bob Halley
* isn't being used by anyone, we can clean
* it up.
*/
- if (rbtdb->current_version->references == 0)
+ if (rbtdb->current_version->references == 0) {
cleanup_version =
rbtdb->current_version;
+ APPENDLIST(version->changed_list,
+ cleanup_version->changed_list,
+ link);
+ }
/*
* Become the current version.
*/
* We're rolling back this transaction.
*/
cleanup_list = version->changed_list;
+ ISC_LIST_INIT(version->changed_list);
rollback = ISC_TRUE;
cleanup_version = version;
rbtdb->future_version = NULL;
if (least_greater == NULL)
least_greater = rbtdb->current_version;
+ INSIST(version->serial < least_greater->serial);
/*
* Is this the least open version?
*/
version->changed_list,
link);
}
- }
+ } else if (version->serial == rbtdb->least_serial)
+ INSIST(EMPTY(version->changed_list));
UNLINK(rbtdb->open_versions, version, link);
}
}
least_serial = rbtdb->least_serial;
UNLOCK(&rbtdb->lock);
- if (cleanup_version != NULL)
+ if (cleanup_version != NULL) {
+ INSIST(EMPTY(cleanup_version->changed_list));
isc_mem_put(rbtdb->common.mctx, cleanup_version,
sizeof *cleanup_version);
+ }
if (!EMPTY(cleanup_list)) {
for (changed = HEAD(cleanup_list);