summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Bakken <luke@bakken.io>2021-12-16 15:47:07 -0800
committermergify-bot <noreply@mergify.com>2021-12-19 04:31:34 +0000
commit85fb374313b00a1879990729fab2b27ee0fd53b4 (patch)
treee1c5d7d7ffec009ff6969f6d12714b312bc0d84a
parent087ad862146f53a62a24e37627b316aed20c32cf (diff)
downloadrabbitmq-server-git-85fb374313b00a1879990729fab2b27ee0fd53b4.tar.gz
Fix win32 memory leak by using `raw` file operations. Not ideal but this
skips all file servers. (cherry picked from commit 458306dc8bf10759651de9038f9b73386e0b2456) (cherry picked from commit b9eb97bed6c7bfd90fc5922e3971d3a222045d6e)
-rw-r--r--deps/rabbit/src/rabbit_file.erl20
1 files changed, 13 insertions, 7 deletions
diff --git a/deps/rabbit/src/rabbit_file.erl b/deps/rabbit/src/rabbit_file.erl
index 925a5356d7..58619546ff 100644
--- a/deps/rabbit/src/rabbit_file.erl
+++ b/deps/rabbit/src/rabbit_file.erl
@@ -90,13 +90,19 @@ read_file_info(File) ->
read_term_file(File) ->
try
- {ok, Data} = with_handle(fun () -> prim_file:read_file(File) end),
- {ok, Tokens, _} = erl_scan:string(binary_to_list(Data)),
- TokenGroups = group_tokens(Tokens),
- {ok, [begin
- {ok, Term} = erl_parse:parse_term(Tokens1),
- Term
- end || Tokens1 <- TokenGroups]}
+ {ok, FInfo} = file:read_file_info(File, [raw]),
+ {ok, Fd} = file:open(File, [read, raw, binary]),
+ try
+ {ok, Data} = file:read(Fd, FInfo#file_info.size),
+ {ok, Tokens, _} = erl_scan:string(binary_to_list(Data)),
+ TokenGroups = group_tokens(Tokens),
+ {ok, [begin
+ {ok, Term} = erl_parse:parse_term(Tokens1),
+ Term
+ end || Tokens1 <- TokenGroups]}
+ after
+ ok = file:close(Fd)
+ end
catch
error:{badmatch, Error} -> Error
end.