Commit 46fc0437 authored by Rusty Russell's avatar Rusty Russell

More dependency optimization: seems to happen with transactions enabled.

parent d72286e0
......@@ -1165,8 +1165,10 @@ static void add_dependency(void *ctx,
unsigned int needs_start, sat_start;
/* We don't depend on ourselves. */
if (needs_file == satisfies_file)
if (needs_file == satisfies_file) {
assert(satisfies_opnum < needs_opnum);
return;
}
#if DEBUG_DEPS
printf("%s:%u: depends on %s:%u\n",
......@@ -1319,6 +1321,29 @@ static void optimize_dependencies(struct op *op[], unsigned int num_ops[],
{
unsigned int i, j;
/* There can only be one real dependency on each file */
for (i = 0; i < num; i++) {
for (j = 1; j < num_ops[i]; j++) {
struct depend *dep, *next;
struct depend *prev[num];
memset(prev, 0, sizeof(prev));
list_for_each_safe(&op[i][j].pre, dep, next, pre_list) {
if (!prev[dep->satisfies_file]) {
prev[dep->satisfies_file] = dep;
continue;
}
if (prev[dep->satisfies_file]->satisfies_opnum
> dep->satisfies_opnum) {
talloc_free(prev[dep->satisfies_file]);
prev[dep->satisfies_file] = dep;
} else
talloc_free(dep);
}
}
}
for (i = 0; i < num; i++) {
int deps[num];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment