- unsigned int i, j, num_traversals = 0;
- struct traverse_dep *dep;
-
- /* Sort by which one runs first. */
- int compare_traverse_dep(const void *_a, const void *_b)
- {
- const struct traverse_dep *ta = _a, *tb = _b;
- const struct op *a = &op[ta->file][ta->op_num],
- *b = &op[tb->file][tb->op_num];
-
- if (a->serial != b->serial)
- return a->serial - b->serial;
-
- /* If they have same serial, it means one didn't make any
- * changes. Thus sort by end in that case. */
- return a[a->group_len].serial - b[b->group_len].serial;
- }
-
- dep = talloc_array(NULL, struct traverse_dep, 1);
-
- /* Count them. */
- for (i = 0; i < num; i++) {
- for (j = 1; j < num_ops[i]; j++) {
- /* Transaction or traverse start. */
- if (op[i][j].group_start == j) {
- dep = talloc_realloc(NULL, dep,
- struct traverse_dep,
- num_traversals+1);
- dep[num_traversals].file = i;
- dep[num_traversals].op_num = 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_num
- + op[dep[i-1].file][dep[i-1].op_num].group_len);
- }
- talloc_free(dep);
-}
-#endif /* TRAVERSALS_TAKE_TRANSACTION_LOCK */
-
-static bool changes_db(const struct op *op)
-{
- return gives(op, NULL) != NULL;