summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <klishinm@vmware.com>2021-12-20 11:10:28 +0500
committerGitHub <noreply@github.com>2021-12-20 11:10:28 +0500
commit88657b047b56a993cba0419b77b4289ea3db1442 (patch)
treedf3201d239e09072bfea5545e90243e2fa4d54f5
parent087ad862146f53a62a24e37627b316aed20c32cf (diff)
parent0684155cdb97742705e09cfd5dcb3f3af09214b6 (diff)
downloadrabbitmq-server-git-88657b047b56a993cba0419b77b4289ea3db1442.tar.gz
Merge pull request #3918 from rabbitmq/mergify/bp/v3.8.x/pr-3917
Fix win32 memory leak by using `raw` file operations (backport #3906) (backport #3917)
-rw-r--r--deps/rabbit/src/rabbit_file.erl15
1 files changed, 12 insertions, 3 deletions
diff --git a/deps/rabbit/src/rabbit_file.erl b/deps/rabbit/src/rabbit_file.erl
index 925a5356d7..2060c354c5 100644
--- a/deps/rabbit/src/rabbit_file.erl
+++ b/deps/rabbit/src/rabbit_file.erl
@@ -40,7 +40,7 @@ is_file(File) ->
is_dir(Dir) -> is_dir_internal(read_file_info(Dir)).
-is_dir_no_handle(Dir) -> is_dir_internal(prim_file:read_file_info(Dir)).
+is_dir_no_handle(Dir) -> is_dir_internal(file:read_file_info(Dir, [raw])).
is_dir_internal({ok, #file_info{type=directory}}) -> true;
is_dir_internal(_) -> false.
@@ -83,14 +83,23 @@ wildcard(Pattern, Dir) ->
list_dir(Dir) -> with_handle(fun () -> prim_file:list_dir(Dir) end).
read_file_info(File) ->
- with_handle(fun () -> prim_file:read_file_info(File) end).
+ with_handle(fun () -> file:read_file_info(File, [raw]) end).
-spec read_term_file
(file:filename()) -> {'ok', [any()]} | rabbit_types:error(any()).
read_term_file(File) ->
try
- {ok, Data} = with_handle(fun () -> prim_file:read_file(File) end),
+ F = fun() ->
+ {ok, FInfo} = file:read_file_info(File, [raw]),
+ {ok, Fd} = file:open(File, [read, raw, binary]),
+ try
+ file:read(Fd, FInfo#file_info.size)
+ after
+ file:close(Fd)
+ end
+ end,
+ {ok, Data} = with_handle(F),
{ok, Tokens, _} = erl_scan:string(binary_to_list(Data)),
TokenGroups = group_tokens(Tokens),
{ok, [begin