summaryrefslogtreecommitdiff
path: root/src/rebar_digraph.erl
diff options
context:
space:
mode:
authorFred Hebert <mononcqc@ferd.ca>2015-08-17 11:13:29 -0400
committerFred Hebert <mononcqc@ferd.ca>2015-08-17 11:13:29 -0400
commitd86399d7110912a9961ff343f501db16b5b24ad4 (patch)
treea67ddd4b92bee36e9c982f56644f3acaabc2bd70 /src/rebar_digraph.erl
parent642897867eddf00a7b1a9bf3ca99c0851b287db0 (diff)
parent278c0bdfa521a9442c814d40b90528249a77a267 (diff)
Merge pull request #720 from pvmart/master
fix leaking ets tables caused by digraphs
Diffstat (limited to 'src/rebar_digraph.erl')
-rw-r--r--src/rebar_digraph.erl31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/rebar_digraph.erl b/src/rebar_digraph.erl
index 1132a6c..d21ff77 100644
--- a/src/rebar_digraph.erl
+++ b/src/rebar_digraph.erl
@@ -16,20 +16,23 @@ compile_order(Apps) ->
Deps = all_apps_deps(App),
add(Graph, {Name, Deps})
end, Apps),
- case digraph_utils:topsort(Graph) of
- false ->
- case digraph_utils:is_acyclic(Graph) of
- true ->
- {error, no_sort};
- false ->
- Cycles = lists:sort(
- [lists:sort(Comp) || Comp <- digraph_utils:strong_components(Graph),
- length(Comp)>1]),
- {error, {cycles, Cycles}}
- end;
- V ->
- {ok, names_to_apps(lists:reverse(V), Apps)}
- end.
+ Order =
+ case digraph_utils:topsort(Graph) of
+ false ->
+ case digraph_utils:is_acyclic(Graph) of
+ true ->
+ {error, no_sort};
+ false ->
+ Cycles = lists:sort(
+ [lists:sort(Comp) || Comp <- digraph_utils:strong_components(Graph),
+ length(Comp)>1]),
+ {error, {cycles, Cycles}}
+ end;
+ V ->
+ {ok, names_to_apps(lists:reverse(V), Apps)}
+ end,
+ true = digraph:delete(Graph),
+ Order.
add(Graph, {PkgName, Deps}) ->
case digraph:vertex(Graph, PkgName) of