diff options
| -rw-r--r-- | src/file_handle_cache.erl | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/file_handle_cache.erl b/src/file_handle_cache.erl index bcefd94552..7edba23964 100644 --- a/src/file_handle_cache.erl +++ b/src/file_handle_cache.erl @@ -527,12 +527,11 @@ get_or_reopen(RefNewOrReopens) -> {OpenHdls, []} -> {ok, [Handle || {_Ref, Handle} <- OpenHdls]}; {OpenHdls, ClosedHdls} -> - Tree = get_age_tree(), - Oldest = oldest(Tree, fun () -> now() end), + Oldest = oldest(get_age_tree(), fun () -> now() end), case gen_server:call(?SERVER, {open, self(), length(ClosedHdls), Oldest}, infinity) of ok -> - case reopen(ClosedHdls, Tree, []) of + case reopen(ClosedHdls) of {ok, RefHdls} -> sort_handles(RefNewOrReopens, OpenHdls, RefHdls, []); {error, Error} -> {error, Error} @@ -546,12 +545,7 @@ get_or_reopen(RefNewOrReopens) -> end end. -sort_handles([], [], [], Acc) -> - {ok, lists:reverse(Acc)}; -sort_handles([{Ref, _} | RefHdls], [{Ref, Handle} | RefHdlsA], RefHdlsB, Acc) -> - sort_handles(RefHdls, RefHdlsA, RefHdlsB, [Handle | Acc]); -sort_handles([{Ref, _} | RefHdls], RefHdlsA, [{Ref, Handle} | RefHdlsB], Acc) -> - sort_handles(RefHdls, RefHdlsA, RefHdlsB, [Handle | Acc]). +reopen(ClosedHdls) -> reopen(ClosedHdls, get_age_tree(), []). reopen([], Tree, RefHdls) -> put_age_tree(Tree), @@ -594,6 +588,13 @@ partition_handles(RefNewOrReopens) -> end end, {[], []}, RefNewOrReopens). +sort_handles([], [], [], Acc) -> + {ok, lists:reverse(Acc)}; +sort_handles([{Ref, _} | RefHdls], [{Ref, Handle} | RefHdlsA], RefHdlsB, Acc) -> + sort_handles(RefHdls, RefHdlsA, RefHdlsB, [Handle | Acc]); +sort_handles([{Ref, _} | RefHdls], RefHdlsA, [{Ref, Handle} | RefHdlsB], Acc) -> + sort_handles(RefHdls, RefHdlsA, RefHdlsB, [Handle | Acc]). + put_handle(Ref, Handle = #handle { last_used_at = Then }) -> Now = now(), age_tree_update(Then, Now, Ref), |
