-#if TRAVERSALS_TAKE_TRANSACTION_LOCK
-struct traverse_dep {
- unsigned int file;
- unsigned int op_num;
- const struct op *op;
-};
-
-/* Sort by which one runs first. */
-static int compare_traverse_dep(const void *_a, const void *_b)
-{
- const struct traverse_dep *a = _a, *b = _b;
- const struct traverse *trava = a->op->trav, *travb = b->op->trav;
-
- if (a->op->serial != b->op->serial)
- return a->op->serial - b->op->serial;
-
- /* If they have same serial, it means one didn't make any changes.
- * Thus sort by end in that case. */
- return a->op[trava->end - a->op_num].serial
- - b->op[travb->end - b->op_num].serial;
-}
-
-/* Traversals can deadlock against each other. Force order. */
-static void make_traverse_depends(char *filename[],
- struct op *op[], unsigned int num_ops[],
- unsigned int num)
-{
- unsigned int i, j, num_traversals = 0;
- struct traverse_dep *dep;
-
- dep = talloc_array(NULL, struct traverse_dep, 1);
-
- /* Count them. */
- for (i = 0; i < num; i++) {
- for (j = 0; j < num_ops[i]; j++) {
- if (op[i][j].op == OP_TDB_TRAVERSE_START
- || op[i][j].op == OP_TDB_TRAVERSE_READ_START) {
- dep = talloc_realloc(NULL, dep,
- struct traverse_dep,
- num_traversals+1);
- dep[num_traversals].file = i;
- dep[num_traversals].op_num = j;
- dep[num_traversals].op = &op[i][j];
- num_traversals++;
- }
- }
- }
- qsort(dep, num_traversals, sizeof(dep[0]), compare_traverse_dep);
- for (i = 1; i < num_traversals; i++) {
- /* i depends on end of traverse i-1. */
- add_dependency(NULL, op, filename, dep[i].file, dep[i].op_num,
- dep[i-1].file, dep[i-1].op->trav->end);
- }
- talloc_free(dep);
-}
-#endif /* TRAVERSALS_TAKE_TRANSACTION_LOCK */
-
-static bool changes_db(const struct op *op)