summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2010-08-22 19:38:40 +0100
committerMatthias Radestock <matthias@rabbitmq.com>2010-08-22 19:38:40 +0100
commit2653158aff3fcbd22ba40e8c5d6ada37791aa41e (patch)
tree61e5e1ebbe839fe4161d5806221f496fcc9917d1
parenta736bfa79c3540beffc069ed7a133461c9a332d9 (diff)
downloadrabbitmq-server-git-2653158aff3fcbd22ba40e8c5d6ada37791aa41e.tar.gz
make it more obvious that reopen is a with_age_tree in disguise
plus some minor cosmetic shuffling
-rw-r--r--src/file_handle_cache.erl19
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),